与Kotlin 12编译时函数声明错误

我已经继承了一个老的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) ,两者之间的大括号只是挂出。

用“init”前缀这两个功能块,请参阅初始化块的前缀

正如@Andrey在他对这个问题的评论中所指出的那样,以及来自@ D3xter的回答(将init添加到初始化块 ),以下是更新后的代码(供参考):

 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) } }