Могут ли объекты Valhalla Value содержать универсальные типы и сгладить их, если они являются примитивными типами? - PullRequest
0 голосов
/ 04 сентября 2018

Будет ли JEP 169: объекты-значения и JEP 218: обобщенные типы примитивных типов спецификации работают вместе?

Или лучше, возможен ли следующий сценарий?

@jvm.internal.value.ValueCapableClass
final class Tuple<T1, T2> {

    private final T1 t1;
    private final T2 t2;

    // ...

}

, а затем

// t1 and t2 flattened because they are ints
final Tuple<int, int> tuple;

Я спрашиваю об этом, потому что я не видел пример @ValueCapableClass с использованием универсальных типов, только примеры, подобные этому :

@jvm.internal.value.ValueCapableClass
final class MyValue {
    final int x, y;
    // ...
}

Я прочитал из JEP 218: Обобщения по сравнению с примитивными типами (выделено мной):

Аргументы универсального типа ограничены для расширения Object, что означает, что они несовместимы с примитивными экземплярами, если не используется бокс, что снижает производительность. С возможным добавлением типов значений в Java (предмет отдельного JEP) это ограничение становится еще более обременительным. Мы предлагаем исправить это, поддерживая специализацию универсальных классов и интерфейсов, когда создаются экземпляры с аргументами примитивного типа. Мы предлагаем исправить это, поддерживая специализацию универсальных классов и интерфейсов, когда создаются экземпляры с аргументами примитивного типа.

и

Поскольку восемь примитивных типов являются единственными, враждебными дженерикам, это терпимо, но раздражает; с появлением типов значений это ограничение будет гораздо более болезненным.

но мне неясно, предназначены ли они для совместной работы (218 является расширением 169), или универсальный @ValueCapableClasses может использоваться только для неуниверсальных классов.

1 Ответ

0 голосов
/ 07 сентября 2018

Согласно этой речи Брайана Гетца

[...] они [Типы значений] могут использовать обобщения, они могут иметь переменные типа [...]

Похоже, что generics находятся в процессе поддержки в будущих сборках.

...