首页 文章

使用Kotlin 12进行编译时出现函数声明错误

提问于
浏览
0

我继承了一个较旧的Kotlin代码库,并尝试使用最新的编译器编译有很多问题 . 我无法搞清楚的是这些奇怪的功能在课堂中间悬挂,没有任何明显的呼唤 . 我想知道是否有人知道这曾经是什么,以及在较新版本的Kotlin中它被取代了什么?

public class SomeAdapter(val friends: SomeAdapterProvider, val listener: OnItemClickedListener) : RecyclerView.Adapter<SomeAdapter.ViewHolder>() {

    trait OnItemClickedListener {
        fun onItemClicked(f: Friendship)
    }

    private inner class ViewHolder(v: View) : RecyclerView.ViewHolder(v), View.OnClickListener {
        override fun onClick(v: View) {
            listener.onItemClicked(somethings[getPosition()])
        }

        val text: TextView by inject(android.R.id.text1)
        val image: Picture by inject(R.id.imageview);

        {
            itemView setOnClickListener this
        }
    }

    {
        setHasStableIds(true)
    }
}

具体来说,有问题的行是 itemView setOnClickListener thissetHasStableIds(true) ,两个中间的大括号都悬空了 .

2 回答

  • 0

    正如@Andrey在对该问题的评论中所指出的,以及来自@ D3xter的答案(将 init 添加到initialization blocks),这里是更新的代码(供参考):

    public class SomeAdapter(val friends: SomeAdapterProvider, val listener: OnItemClickedListener) : RecyclerView.Adapter<SomeAdapter.ViewHolder>() {
    
        trait OnItemClickedListener {
            fun onItemClicked(f: Friendship)
        }
    
        private inner class ViewHolder(v: View) : RecyclerView.ViewHolder(v), View.OnClickListener {
            override fun onClick(v: View) {
                listener.onItemClicked(somethings[getPosition()])
            }
    
            val text: TextView by inject(android.R.id.text1)
            val image: Picture by inject(R.id.imageview);
    
            init { // FIXED here
                itemView setOnClickListener this
            }
        }
    
        init { // FIXED here
            setHasStableIds(true)
        }
    }
    
  • 3

    使用"init"为这两个功能块添加前缀,请参阅Prefixes For Initializer Blocks

相关问题