只有安全(?)或非空断言(!!)的电话才可以在一个可为空的接收器上

我必须使用?.!!. 每次在onBindViewHolderonCreateViewHolder ? 有什么办法可以避免这种情况?

holder.textview.textparent.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] } 

当你在你的例子中使用可为空的类型时,你必须对你的代码应用安全措施。 要么你用?. 每次或者你检查你的参数是否为!=nullif编译器知道对这个参数的调用是安全的,那么null是不可能的。

在你的特殊情况下,虽然没有必要有空类型。 只要从参数中删除问号,一切都很好。

顺便说一句:不要使用!! ,当然有更好的解决方案