我正在阅读 java 8 语言规范类型推断。它说
List<String> ls = new ArrayList<>()
将首先减少
ArrayList<α> -> List<String>
然后到
α <= String
最后到
α = String
我很难理解如何减少约束
ArrayList<α> -> List<String> to α <= String
是派生出来的。如果有人能指出使用 java 8 语言规范的逻辑,那将是一个很大的帮助。
这是减少的链接
感谢#Holger的解释。以下是我对推导的看法
new ArrayList<> -> List<String> to ArrayList<α> -> List<String>
如果我错了,请纠正我。
首先找到我们使用#15.9.3的构造函数的临时方法
否则,构造函数的参数是类实例创建表达式的参数列表中的参数,如果有的话,按照它们在表达式中出现的顺序。
如果类实例创建表达式使用 <> 来省略类类型参数,则定义方法列表 m1...mn 用于重载决策和类型参数推断。
然后用#18.5.2推导
ArrayList<α> -> List<String>
因为是一个 poly 表达式并且没有任何通配符类型参数;
- 否则,约束公式‹R θ → T›被简化并与B2合并。