Будет ли 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
может использоваться только для неуниверсальных классов.