Smartcasting на и с платформы типа в kotlin

Я использую kotlin для создания адаптера, который расширяет BaseAdapter в Android. ниже приведен код внутри метода getView

 override fun getView(position: Int, convertView: View?, parent: ViewGroup?): View? { var binding : ImageBinding var conView = convertView if(conView == null){ binding = DataBindingUtil.inflate(LayoutInflater.from(parent?.context), R.layout.image, parent, false) conView = binding.root; conView.tag = binding }else { binding = conView.getTag() as ImageBinding } return conView; } 

conView.tag = binding и binding = conView.getTag() выделяется в розовом цвете. Когда я наводил курсор на conView.tag = binding к моей мыши, появляется всплывающее окно с сообщением Smart cast to android.view.View! , И когда я binding = conView.tag над binding = conView.tag , появляется всплывающее окно с сообщением Smart cast to android.view.View . Обратите внимание на разницу в двух сообщениях, где в последнем отсутствует знак типа платформы (!)

Как я могу реализовать два предложенных варианта?

Поскольку convertView – это переменная типа NULL ( View? ), var conView = convertView convertView создает копию переменной переменной conView . Поэтому вы должны обрабатывать переменную conView как обнуляемую.

Попробуйте следующее:

 override fun getView(position: Int, convertView: View?, parent: ViewGroup?): View? { var binding : ImageBinding convertView?.let { binding = it.tag as ImageBinding return it } binding = DataBindingUtil.inflate(LayoutInflater.from(parent?.context), R.layout.image, parent, false) val conView = binding.root conView.tag = binding return conView } 

Примечание . Точки с запятой в Котлине не требуются, помните об этом