只有安全(?)或非空断言(!!)的电话才可以在一个可为空的接收器上
我必须使用?.
和!!.
每次在onBindViewHolder
和onCreateViewHolder
? 有什么办法可以避免这种情况?
holder.textview.text
和parent.context
显示此错误。
代码:
override fun onBindViewHolder(holder: ViewHolder?, position: Int) { holder.textview.text = items[position] } override fun onCreateViewHolder(parent: ViewGroup?, viewType: Int):ViewHolder { return ViewHolder(TextView(parent.context)) }
当你重写一个在Java中声明的方法时,它的参数将有平台类型,这意味着没有关于它们的可为空信息(除非它们被明确注释 )。 您可以决定是否将这些参数标记为空。 查看有关平台类型的官方文档。
在你的情况下,你可以安全地删除?
从这两个参数,因为他们永远不会传递null
值。 这可以免除你必须做强制性的空检查。
下面是删除可空类型的样子:
override fun onBindViewHolder(holder: ViewHolder, position: Int) { holder.textview.text = items[position] } override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder { return ViewHolder(TextView(parent.context)) }
除非在count> 0的时候在你的onCreateViewHolder
创建了null viewholder,否则这个viewholder将永远不会为null,所以它安全地移除了?
override fun onBindViewHolder(holder: ViewHolder, position: Int) { holder.textview.text = items[position] }
当你在你的例子中使用可为空的类型时,你必须对你的代码应用安全措施。 要么你用?.
每次或者你检查你的参数是否为!=null
。 if
编译器知道对这个参数的调用是安全的,那么null
是不可能的。
在你的特殊情况下,虽然没有必要有空类型。 只要从参数中删除问号,一切都很好。
顺便说一句:不要使用!!
,当然有更好的解决方案