我无法从 Kotlin 中的嵌套 class 访问任何 class 成员
I can't reach any class member from a nested class in Kotlin
我想从 PersonAdapter class 访问 MainFragment class 的成员,但其中 none 可用。我尝试将 classes 和成员 public 设为私有,但到目前为止没有任何效果。
我想我错过了一些明显的东西,但我就是想不通。
class MainFragment : Fragment() {
lateinit var personAdapter: PersonAdapter
lateinit var personListener: OnPersonSelected
private var realm: Realm by Delegates.notNull()
lateinit var realmListener: RealmChangeListener<Realm>
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
val v = inflater.inflate(R.layout.fragment_main, container, false)
return v
}
class PersonAdapter() : RecyclerView.Adapter<ViewHolder>() {
var localPersonList = personList
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
holder.bindItems(localPersonList[position])
holder.itemView.setOnClickListener {
Toast.makeText(context, "click", Toast.LENGTH_SHORT).show()
//I want to reach personListener from here
}
}
override fun onCreateViewHolder(parent: ViewGroup?, viewType: Int): ViewHolder {
val v = LayoutInflater.from(parent!!.context).inflate(R.layout.person_list_item, parent, false)
return ViewHolder(v)
}
}}
在 Kotlin 中,嵌套 classes 默认无法访问外部 class 实例,就像嵌套 static class
es 不能在 Java.[=16 中一样=]
为此,将 inner
修饰符添加到嵌套的 class:
class MainFragment : Fragment() {
// ...
inner class PersonAdapter() : RecyclerView.Adapter<ViewHolder>() {
// ...
}
}
请注意,inner
class 持有对其包含的 class 实例的引用,这可能会影响后者的生命周期,如果 inner
class 实例全局存储。
参见:Nested classes 语言参考
在 Kotlin 中,有 2 种嵌套 classes。
- 嵌套Class
- 内Class
不允许嵌套class访问外部class的成员。
如果你想在嵌套class中访问外部class的成员,那么你需要将嵌套class定义为内部class。
class OuterClass{
var name="john"
inner class InnerClass{
//....
}
}
- 添加
inner
- 请注意,Android Studio 的代码完成 (IntelliSense) 在内部 class
中不起作用
class OuterClass {
val outerVariable = "Hello, World!"
inner class InnerClass {
// Code completion doesn't work here
val innerVariable = outerVariable // Code completion work
fun innerFunction() {
// Code completion work
}
}
}
我想从 PersonAdapter class 访问 MainFragment class 的成员,但其中 none 可用。我尝试将 classes 和成员 public 设为私有,但到目前为止没有任何效果。 我想我错过了一些明显的东西,但我就是想不通。
class MainFragment : Fragment() {
lateinit var personAdapter: PersonAdapter
lateinit var personListener: OnPersonSelected
private var realm: Realm by Delegates.notNull()
lateinit var realmListener: RealmChangeListener<Realm>
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
val v = inflater.inflate(R.layout.fragment_main, container, false)
return v
}
class PersonAdapter() : RecyclerView.Adapter<ViewHolder>() {
var localPersonList = personList
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
holder.bindItems(localPersonList[position])
holder.itemView.setOnClickListener {
Toast.makeText(context, "click", Toast.LENGTH_SHORT).show()
//I want to reach personListener from here
}
}
override fun onCreateViewHolder(parent: ViewGroup?, viewType: Int): ViewHolder {
val v = LayoutInflater.from(parent!!.context).inflate(R.layout.person_list_item, parent, false)
return ViewHolder(v)
}
}}
在 Kotlin 中,嵌套 classes 默认无法访问外部 class 实例,就像嵌套 static class
es 不能在 Java.[=16 中一样=]
为此,将 inner
修饰符添加到嵌套的 class:
class MainFragment : Fragment() {
// ...
inner class PersonAdapter() : RecyclerView.Adapter<ViewHolder>() {
// ...
}
}
请注意,inner
class 持有对其包含的 class 实例的引用,这可能会影响后者的生命周期,如果 inner
class 实例全局存储。
参见:Nested classes 语言参考
在 Kotlin 中,有 2 种嵌套 classes。
- 嵌套Class
- 内Class
不允许嵌套class访问外部class的成员。
如果你想在嵌套class中访问外部class的成员,那么你需要将嵌套class定义为内部class。
class OuterClass{
var name="john"
inner class InnerClass{
//....
}
}
- 添加
inner
- 请注意,Android Studio 的代码完成 (IntelliSense) 在内部 class 中不起作用
class OuterClass {
val outerVariable = "Hello, World!"
inner class InnerClass {
// Code completion doesn't work here
val innerVariable = outerVariable // Code completion work
fun innerFunction() {
// Code completion work
}
}
}