TL;DR
“...拳击的问题在于它是[临时的]和昂贵的;为解决这两个问题,已经进行了广泛的工作“ - Brian Goetz,瓦尔哈拉州,2020年3月
这让我怀疑,对你所引用的规范的那些更改正在为上面链接中讨论的L-World计划中的“代码像类一样工作,像int一样工作”功能准备语言。
“...任何人都可以用例子给我一些解释?...”
注释中链接到的 2016 错误报告中的示例(以及链接到的 2013 错误报告)给出了列表中 #4 的最佳示例。基于这些,以下是列表中#5的示例...
< I extends Integer > void soAns0( I intRef ) {
int intPrim;
long longPrim = /* (3) a widening primitive conversion */
intPrim = /* (2) an unboxing conversion */
intRef; /* (1) a widening reference */
}
“...如果可能的话,请同时解释其实际用法......”
自然数通常被称为“整数”。Java语言教程展示了将自然数限制为仅整数类型的
一种实际用法。
public class NaturalNumber<T extends Integer> {
private T n;
public NaturalNumber(T n) { this.n = n; }
public boolean isEven() {
return n.intValue() % 2 == 0;
}
// …
}
RowFilter<M,I>的API文档中也有此示例。
…
public boolean include(Entry<? extends PersonModel, ? extends Integer> entry) {
…
Person person = personModel.getPerson(entry.getIdentifier());
…
}
…
T 扩展 Integer
的另一个用例可能是合适的,如果你想要显式禁止你的类被任何其他类型的 Number
参数化,并显式禁止将 Integer 添加到
该参数化类型中 — 通过利用 Get/Put 原则。
假设您有一些代码,给定一些数字,将创建该数量的对象。如果你想通过用Long.MAX_VALUE
的DOS尝试次数来禁止不良行为者压倒你的系统,那么边界<T扩展了短>
可能是限制在任何一个方法调用中创建的对象数量的一种方法。
“...这些现有的程序是什么样子的?它们是java代码吗?...”
在github上搜索T扩展Integed
会发现有八万次点击。
“...与捕获的互操作性意味着什么?...”
我将捕获转换的明确解释推迟到JLS本身。
“...为什么它很重要?...”
捕获转换很重要,因为它与类型推断有联系。
符号 ‹Integer <: α›
在 JLS 关于类型推断的部分或多或少是表示 Integer 扩展 Integer
的一种形式方式(T 扩展 Integer
实际上意味着什么)...
...
从 Arrays.asList(1, 2.0)
中,我们有约束公式 ‹1 → α›
和 ‹2.0 → > α›
。通过约简,这些公式将成为约束公式 ‹int → α›
和 ‹双→ α›
,然后 ‹整数<:α›
和 ‹双<:α›
。
...
鉴于此,JDK使用<T扩展整数也
就不足为奇了>JDK本身的泛型/类型推理相关测试中有很多。
这是我绝对最喜欢的<T扩展了Integer>
在野外的使用。
不过,大多数情况下,我敢打赌,那些与开箱/加宽相关的规范更改与Valhalla有很大关系。