В Kotlin, как определить свойство универсального типа с верхним пределом ограничения? - PullRequest
0 голосов
/ 18 февраля 2019

Что такое Kotlin эквивалент следующего кода Java?

class Test {
    Class<? extends Number> types = new Class[] {
            Integer.class, Long.class, Short.class, Byte.class, Float.class, Double.class
    };
}

Ответы [ 3 ]

0 голосов
/ 18 февраля 2019

Здесь вам нужен ковариантный массив, или out дисперсия для вашего универсального параметра:

var types: Array<Class<out Number>> = arrayOf(
        Int::class.java,
        Long::class.java,
        Short::class.java,
        Byte::class.java,
        Float::class.java,
        Double::class.java
)

Подобные вещи описаны в документации под дисперсия (хотяможет потребоваться некоторое время, чтобы распутать все это, если вы новичок в этом).

0 голосов
/ 18 февраля 2019

В дополнение к другим ответам, вы можете создать тот же код в Kotlin, используя типы данных Kotlin, как;

var types: Array<KClass<out Number>> = arrayOf(
        Int::class,
        Long::class,
        Short::class,
        Byte::class,
        Float::class,
        Double::class
    )

Здесь мы используем KClass, который является ссылочным типом класса Kotlin, а out этоаннотация типа ковариации (производитель).

0 голосов
/ 18 февраля 2019

Вы можете использовать ключевое слово out:

var types: Array<Class<out Number>> = arrayOf(
    Integer::class.java, 
    Long::class.java, 
    Short::class.java, 
    Byte::class.java, 
    Float::class.java, 
    Double::class.java
)

out модификатор используется для обозначения ковариации (аналогично ? extends T в Java). Ковариация - это возможность изменить аргумент универсального типа с класса на одного из его родителей, т.е. присвоить List<String> List<Any>.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...