我正在尝试使用伴随对象工厂方法(相当于Java中的静态工厂方法)在Kotlin中创建嵌套的内部类.这是我的代码的简化版本.
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
}
}
Run Code Online (Sandbox Code Playgroud)
编译器突出显示"伴侣",说"Modifier伴侣不适用于内部类",它还突出显示了InnerClass()调用,说"表达式是从嵌套类Factory无法访问",使用"inner"关键字使类内部.
如何使用Java中的静态工厂方法实现我在这里尝试做的事情?
mie*_*sol 11
你可以有:
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
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
但是以下内容不会在Kotlin中编译:
class Parent {
inner class Nested {
companion object Factory {
}
}
}
Run Code Online (Sandbox Code Playgroud)
出于同样的原因,以下内容将无法在Java中编译:
public class Parent {
public class Nested {
public static boolean create(){
return false;
}
}
}
Run Code Online (Sandbox Code Playgroud)
这里的罪魁祸首是inner
Kotlin 中的嵌套类以及Java 中的嵌套非静态类具有对父类实例的隐式引用.由于Kotlin旨在与Java高度互操作,因此遵循相同的规则.
请参阅以下问题以获得更深入的解释:
归档时间: |
|
查看次数: |
5877 次 |
最近记录: |