内部嵌套类的Kotlin工厂

时间:2016-01-15 20:27:09

标签: kotlin

我正在尝试使用伴随对象工厂方法(相当于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中的静态工厂方法实现我在这里尝试做的事情?

1 个答案:

答案 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高度互操作,因此遵循相同的规则。

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