使用 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 this
和 setHasStableIds(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)
}
}
我继承了旧的 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 this
和 setHasStableIds(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)
}
}