Могут ли объекты 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 находятся в процессе поддержки в будущих сборках.

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