使用 Kotlin 12 编译时函数声明错误

Function declaration error when compiling with Kotlin 12

我继承了旧的 Kotlin 代码库,尝试使用最新的编译器进行编译时遇到了很多问题。我无法弄清楚的是这些奇怪的函数,它们挂在 class 的中间,没有任何明显的调用。我想知道是否有人知道这曾经是什么,以及在更新版本的 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 个功能块前加上 "init", 见 Prefixes For Initializer Blocks

正如@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)
    }
}