Java 9或更高版本中预计的泛型专门化,vs List<int>:将如何实现。移除()工作?
泛型专门化和值类型是未来JVM的一个突出特征;链接到Valhalla项目页面here
据我所知,现在可以宣布:
final List<int> myList = new ArrayList<>(); // for instance
但是List
除了Collection
接口中定义的.remove()
方法之外,还定义了另一个.remove()
方法,该方法将int
作为参数,该参数是列表中要删除的索引;这就是为什么当前list
的内容在下面的示例中:
final List<Integer> list = new ArrayList<>();
list.add(1);
list.add(2);
list.add(3);
list.remove(2);
将是[1, 2]
而不是[1, 3]
(选择最具体的重载)
但是,如果将来我们能够声明一个List<int>
,我们就有一个问题:将选择remove
方法的哪个重载
# 1 楼答案
这个答案基于Brian Goetz 2014年12月的this paper。关于这个问题,我能找到的最新消息是;但是请注意,这篇论文是一篇“非正式的素描”,所以关于你的问题还没有确定的答案
首先,a
List<int>
不是List<Integer>
(Subtyping)的子类型:本文还列出了“移民挑战”,其中reference-primitive overloadings(问题是你的问题)是:
建议的解决方案称为the "peeling" technique:
使用这种技术,将保持向后兼容性,并使用新方法
removeByValue
和removeByIndex