Статический список объектов вне класса в Котлине

Статический список всех объектов класса
Работает ли это с Kotlin, если да, можете ли вы привести пример?

Прямо сейчас в моем интерфейсе нет списка, и я создаю сопутствующий объект в обеих реализациях. Но это как-то неправильно .... Пожалуйста, помогите мне понять это :)

У меня есть четыре способа сделать это прямо сейчас, я покажу два здесь, потому что четвертый потребует более сложного UML. Может быть, это на самом деле то, как вы это делаете, если нет, может быть, у кого-то из вас есть идея;)

Мой код в Котлине подходит к одному:

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)
    }
}

Мой код в Котлине приближается к двум:

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

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

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

Мой код в Котлине приближается к трем:

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 не сильно отличается от невозможности преобразовать ваше решение Java в Kotlin.

Tom 13.06.2019 12:42

у меня есть несколько способов сделать это, но я ими не доволен ;) @Tom

Mosch 13.06.2019 13:01

пока вы не применяете правило, согласно которому у вас должен быть хотя бы один элемент в списке, лол :-)

muszeo 14.06.2019 07:05

Kotlin-эквивалент опубликованного вами java-кода на самом деле будет вашим вторым подходом. однако, если вам требуется, чтобы каждая реализация вашего интерфейса обрабатывала инициализацию списка, тогда ваш третий подход будет лучшим выбором.

chris 27.08.2019 19:09
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
4
3 039
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 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) {}
    }
}

Другие вопросы по теме