关于Java7';这是钻石,需要澄清
可能重复:关于Java7';这是钻石,需要澄清,java,Java,可能重复: 使用Java7,为什么会出现以下问题 final List<String> a = new ArrayList<>() { { add("word"); } }; final List a=new ArrayList(){ { 添加(“词语”); } }; 需要显式类型声明,如中所示 final List<String> a = new ArrayList<String>() { {
使用Java7,为什么会出现以下问题
final List<String> a = new ArrayList<>() {
{
add("word");
}
};
final List a=new ArrayList(){
{
添加(“词语”);
}
};
需要显式类型声明,如中所示
final List<String> a = new ArrayList<String>() {
{
add("word");
}
};
final List a=new ArrayList(){
{
添加(“词语”);
}
};
总之,Java避免了类型推断
在任何情况下,
仅在编译器不需要知道使用了哪种泛型类型时才起作用。对于匿名类,需要提供实际类型,因为编译器不会推断类型
有效地
关闭类型检查,而不是提供类型推断。匿名类存储实际的泛型类型,因此必须提供它
List<String> a = new ArrayList<>()
List a=new ArrayList()
很像
@SuppressWarnings("unchecked")
List<String> a = new ArrayList()
@SuppressWarnings(“未选中”)
列表a=新的ArrayList()
但对于匿名子类,编译器需要为其指定泛型类型。由于某些技术问题,匿名类不支持Diamond
+1嗯,我绝对相信
是关于推理的!工厂方法的工作方式。菱形不是原始类型。它进行类型推断和类型检查。@unreputable您能举一个例子,说明
检查了什么东西或推断了类型吗?如果类型变量有边界,它会变得更明显。e、 如果我们有类NumList扩展了ArrayList{}
,那么List List=newnumlist()代码>无法编译,因为推理失败。但是原始输入是有效的:List=newnumlist()代码>