Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
关于Java7';这是钻石,需要澄清_Java - Fatal编程技术网

关于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()