【问题标题】:Static List of Objects out Class in KotlinKotlin 中的静态对象列表
【发布时间】:2019-06-13 09:43:58
【问题描述】:

Static List of all Objects of Class
如果可以,这是否与 Kotlin 一起使用,您可以提供一个示例吗?

现在我的界面没有列表,我正在两个实现中创建一个伴随对象。但不知何故感觉不对……请帮我解决这个问题:)

我现在有四种方法可以做到这一点,我将在这里展示两种,因为第四种需要更复杂的 UML。如果不是你们中的一个人有想法的话,这实际上就是你的做法;)

我在 Kotlin 中的代码方法一:

interface IMyClass {
}

class MyClassOne : IMyClass {
     companion object {
        var myClassList: ArrayList<IMyClass> = ArrayList()
    }
    constructor() {
        println(myClassList)
    }
}

class MyClassTwo : IMyClass {
     companion object {
        var myClassList: ArrayList<IMyClass> = ArrayList()
    }
    constructor() {
        println(myClassList)
    }
}

我在 Kotlin 中的代码方法二:

interface IMyClass {
    companion object {
       var myClassList: ArrayList<IMyClass> = ArrayList()
    }
}

class MyClassOne : IMyClass {
    constructor() {
        println(IMyClass.myClassList)
    }
}

class MyClassTwo : IMyClass {
    constructor() {
        println(IMyClass.myClassList)
    }
}

我在 Kotlin 中的代码方法三:

interface IMyClass {
    var myClassList: ArrayList<IMyClass>
}

class MyClassOne {
    companion object : IMyClass{
        override var myList: ArrayList<IMyClass>
            get() = TODO("not implemented") //To change initializer of created properties use File | Settings | File Templates.
            set(value) {}
    }
}

class MyClassTwo {
companion object : IMyClass{
        override var myList: ArrayList<IMyClass>
            get() = TODO("not implemented") //To change initializer of created properties use File | Settings | File Templates.
            set(value) {}
    }
}

我的 Java 代码:

public interface IMyClass {
 List<IMyClass> myClassList = new ArrayList<>();
}

public class MyClassOne implements IMyClass {
    public MyClassOne() {
        System.out.println(myClassList );
    }
}

public class MyClassTwo implements IMyClass {
    public MyClassTwo() {
        System.out.println(myClassList);
    }
}

【问题讨论】:

  • "在 Java 中这对我来说很容易 xD" ...那你为什么不能在 Kotlin 中做同样的事情呢? Kotlin 与无法将您的 Java 解决方案转换为 Kotlin 并没有太大区别。
  • 我可以有一些方法来做到这一点,但我对它们不满意;)@Tom
  • 只要你不强制规定你必须在列表中至少有一项 lol :-)
  • 您发布的 java 代码的 kotlin 等效项实际上是您的第二种方法。但是,如果您要求接口的每个实现都处理列表的初始化,那么您的第三种方法将是最佳选择。

标签: java kotlin


【解决方案1】:

我个人决定选择第三个选项:

interface IMyClass {
    var myClassList: ArrayList<IMyClass>
}

class MyClassOne {
    companion object : IMyClass{
        override var myList: ArrayList<IMyClass>
            get() = TODO("not implemented") //To change initializer of created properties use File | Settings | File Templates.
            set(value) {}
    }
}

class MyClassTwo {
companion object : IMyClass{
        override var myList: ArrayList<IMyClass>
            get() = TODO("not implemented") //To change initializer of created properties use File | Settings | File Templates.
            set(value) {}
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-09-29
    • 1970-01-01
    • 2018-06-21
    • 1970-01-01
    • 1970-01-01
    • 2021-01-13
    • 2019-07-09
    • 1970-01-01
    相关资源
    最近更新 更多