gpt4 book ai didi

内部嵌套类的 Kotlin 工厂

转载 作者:行者123 更新时间:2023-12-02 07:08:13 28 4
gpt4 key购买 nike

我试图在 Kotlin 中使用伴随对象工厂方法(相当于 Java 中的静态工厂方法)创建一个嵌套内部类。这是我的代码的简化版本。

class OuterClass {

var myData:List<MyData> = List<>() //gets populated elsewhere

fun getItemFragment(position:Int) : Fragment() {
return InnerClass.Factory.newInstance(position)
}

inner class InnerClass : Fragment() {

companion object Factory {

fun newInstance(position:Int) : InnerClass {
var ic : InnerClass = InnerClass()
var bundle:Bundle = Bundle()
bundle.putInt("index", position)
ic.arguments = bundle
return ic
}

}

override fun onCreateView(inflater:LayoutInflater, container: ViewGroup, savedInstanceState:Bundle): View? {
//create and return view, omitted. Need access to myData
}
}

编译器突出显示“companion”,表示“修饰符同伴不适用于内部类”,并且还突出显示 InnerClass() 调用,表示“表达式无法从嵌套类工厂访问”,使用“inner”关键字使类内部。

如何使用 Java 中的静态工厂方法来实现我在这里尝试做的事情?

最佳答案

你可以拥有:

class OuterClass {
fun getItemFragment(position: Int): Fragment {
return InnerClass.Factory.newInstance(position)
}

class InnerClass : Fragment() {
companion object Factory {
fun newInstance(position: Int): InnerClass {
var ic: InnerClass = InnerClass()
return ic
}
}
}
}

但是以下内容在 Kotlin 中将无法编译:

class Parent {
inner class Nested {
companion object Factory {
}
}
}

出于同样的原因,以下内容在 Java 中将无法编译:

public class Parent {
public class Nested {
public static boolean create(){
return false;
}
}
}

这里的罪魁祸首是 Kotlin 中的嵌套内部类以及 Java 中的嵌套非静态类具有对父类实例的隐式引用。由于 Kotlin 的目标是与 Java 具有高度的互操作性,因此它遵循相同的规则。

请参阅以下问题以获得更深入的解释:

关于内部嵌套类的 Kotlin 工厂,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34819334/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com