我正在尝试使用伴随对象工厂方法(相当于Java中的静态工厂方法)在Kotlin中创建嵌套的内部类。这是我的代码的简化版本。
def main_style(self):
self.setStyleSheet("""
.QVBoxLayout{
background-color: #616161;
}
.QMenuBar{
background-color: #212121;
color: #f5f5f5;
}
.QMenu{
background-color: #212121;
}
.QTextEdit{
background-color: #424242;
color: #f5f5f5;
border: 1px #9e9e9e solid;
}
""")
编译器突出显示“伴侣”,说“Modifier伴侣不适用于内部类”,它还突出显示了InnerClass()调用,说“表达式无法从嵌套类Factory中访问”,使用“inner”关键字来制作班级内心。
如何使用Java中的静态工厂方法实现我在这里尝试做的事情?
答案 0 :(得分:9)
你可以:
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中的嵌套inner
类,以及Java 中的嵌套非静态类具有对父类实例的隐式引用。由于Kotlin旨在与Java高度互操作,因此遵循相同的规则。
请参阅以下问题以获得更深入的解释: