0

JEP 169: Value ObjectsJEP 218: Generics over Primitive Types规范会一起工作吗?

或者更好的是,以下情况是否可能?

@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 中读到:Generics over Primitive Types(强调我的):

泛型类型参数被限制为扩展 Object,这意味着它们与原始实例不兼容,除非使用装箱,这会损害性能。随着可能向 Java 中添加值类型(单独的 JEP 的主题),这种限制变得更加繁重。我们建议通过在使用原始类型参数实例化时支持泛型类和接口的特化来解决这个问题。我们建议通过在使用原始类型参数实例化时支持泛型类和接口的特化来解决这个问题。

八种原始类型是唯一对泛型有敌意的类型,这是可以容忍的,但很烦人;随着value types的出现,这种限制将更加痛苦。

但我不清楚它们是要一起工作(218是 的扩展169),还是泛型@ValueCapableClasses只能用于非泛型类。

4

1 回答 1

1

根据这个 Brian Goetz 的谈话

[...] 他们 [值类型] 可以使用泛型,他们可以有类型变量 [...]

所以它似乎generics在未来的构建中得到支持。

于 2018-09-07T11:12:43.523 回答