Valhalla 的值对象是否可以保存泛型类型并在它们是基元类型的情况下将它们展平?



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 的主题(,此限制变得更加繁琐。我们建议通过在用基元类型参数实例化时支持泛型类和接口的专用化来解决这个问题。我们建议通过在用基元类型参数实例化时支持泛型类和接口的专用化来解决这个问题。

由于八种基元类型是唯一对泛型怀有敌意的类型,这是可以容忍的,但很烦人;随着值类型的出现,这种限制将更加痛苦。

但我不清楚它们是协同工作的(218169的扩展(,还是泛型@ValueCapableClasses只能用于非泛型类。

根据布莱恩·高茨的演讲

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

因此generics似乎正在未来的版本中得到支持。

相关内容

  • 没有找到相关文章

最新更新