Могут ли объекты Valhalla Value содержать универсальные типы и сгладить их, если они являются примитивными типами?
Будут ли совместимы спецификации 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 ответ
Согласно этой речи Брайана Гетца
[...] они [Типы Значения] могут использовать обобщения, у них могут быть переменные типа [...]
Ну, это похоже generics
находятся в процессе поддержки в будущих сборках.