Java 菱形操作符的默认行为是什么

Java 菱形操作符的默认行为是什么,java,diamond-operator,Java,Diamond Operator,我记得看到一份声明,类似于以下内容: private static Logger log=Logger.getLogger(.class) 优点是它可以从一个类粘贴到另一个类,而不会意外地成为另一个类的记录器 现在,我无法编译它,语法肯定是错误的。那么,它自己到底要解析什么(而不是ArrayList(),等等) 多谢各位 更新: 我认为这是合法语法的说法来自: 我在网上看到这是一个合法而巧妙的把戏 我和一位同事都用Java7将其粘贴到IntelliJ中,并且编译正确 这就是说,我找不到一个可以让

我记得看到一份声明,类似于以下内容:

private static Logger log=Logger.getLogger(.class)

优点是它可以从一个类粘贴到另一个类,而不会意外地成为另一个类的记录器

现在,我无法编译它,语法肯定是错误的。那么,它自己到底要解析什么(而不是ArrayList(),等等)

多谢各位

更新:

我认为这是合法语法的说法来自:

  • 我在网上看到这是一个合法而巧妙的把戏
  • 我和一位同事都用Java7将其粘贴到IntelliJ中,并且编译正确

  • 这就是说,我找不到一个可以让我再次访问该页面的搜索,而且我现在也无法编译它!因此,我希望具有编译器或Java规范知识的人能够明确地说出它是否有效以及默认值是什么。

    回到Java 5和6中,当您必须声明泛型类*的新实例时,您必须使用以下语法

    List<String> myList = new ArrayList<String>();
    
    List myList=new ArrayList();
    
    泛型在声明时没有类型推断

    随着的出现,编译器学会了一两个关于类型推断的技巧

    如果编译器可以推断出它,那么在Java 7及以上版本中使用菱形操作符
    将产生与上面代码相同的结果:

    List<String> myList = new ArrayList<>();
    
    List myList=new ArrayList();
    
    当然,在某些情况下,它不能。这是从上面链接的示例中借用的

    List List=new ArrayList();
    列表。添加(“A”);
    //以下语句应失败,因为addAll需要
    
    //集合在Java5和Java6中,当必须声明泛型类*的新实例时,必须使用以下语法

    List<String> myList = new ArrayList<String>();
    
    List myList=new ArrayList();
    
    泛型在声明时没有类型推断

    随着的出现,编译器学会了一两个关于类型推断的技巧

    如果编译器可以推断出它,那么在Java 7及以上版本中使用菱形操作符
    将产生与上面代码相同的结果:

    List<String> myList = new ArrayList<>();
    
    List myList=new ArrayList();
    
    当然,在某些情况下,它不能。这是从上面链接的示例中借用的

    List List=new ArrayList();
    列表。添加(“A”);
    //以下语句应失败,因为addAll需要
    
    //集合在Java5和Java6中,当必须声明泛型类*的新实例时,必须使用以下语法

    List<String> myList = new ArrayList<String>();
    
    List myList=new ArrayList();
    
    泛型在声明时没有类型推断

    随着的出现,编译器学会了一两个关于类型推断的技巧

    如果编译器可以推断出它,那么在Java 7及以上版本中使用菱形操作符
    将产生与上面代码相同的结果:

    List<String> myList = new ArrayList<>();
    
    List myList=new ArrayList();
    
    当然,在某些情况下,它不能。这是从上面链接的示例中借用的

    List List=new ArrayList();
    列表。添加(“A”);
    //以下语句应失败,因为addAll需要
    
    //集合在Java5和Java6中,当必须声明泛型类*的新实例时,必须使用以下语法

    List<String> myList = new ArrayList<String>();
    
    List myList=new ArrayList();
    
    泛型在声明时没有类型推断

    随着的出现,编译器学会了一两个关于类型推断的技巧

    如果编译器可以推断出它,那么在Java 7及以上版本中使用菱形操作符
    将产生与上面代码相同的结果:

    List<String> myList = new ArrayList<>();
    
    List myList=new ArrayList();
    
    当然,在某些情况下,它不能。这是从上面链接的示例中借用的

    List List=new ArrayList();
    列表。添加(“A”);
    //以下语句应失败,因为addAll需要
    
    //收藏什么都没有。它在语法上是不正确的。据我所知,
    .class
    是不合法的,也从来没有合法过。菱形运算符(在Java 7中引入)仅在上一个示例(
    new ArrayList()
    )中使用,以指示应推断构造函数调用的泛型类型参数。(没有菱形操作符表示构造了一个原始类型。)我认为一些IDE可能会用这种语法隐藏一个类型,但它实际上仍然存在?什么都没有。它在语法上是不正确的。据我所知,
    .class
    是不合法的,也从来没有合法过。菱形运算符(在Java 7中引入)仅在上一个示例(
    new ArrayList()
    )中使用,以指示应推断构造函数调用的泛型类型参数。(没有菱形操作符表示构造了一个原始类型。)我认为一些IDE可能会用这种语法隐藏一个类型,但它实际上仍然存在?什么都没有。它在语法上是不正确的。据我所知,
    .class
    是不合法的,也从来没有合法过。菱形运算符(在Java 7中引入)仅在上一个示例(
    new ArrayList()
    )中使用,以指示应推断构造函数调用的泛型类型参数。(没有菱形操作符表示构造了一个原始类型。)我认为一些IDE可能会用这种语法隐藏一个类型,但它实际上仍然存在?什么都没有。它在语法上是不正确的。据我所知,
    .class
    是不合法的,也从来没有合法过。菱形运算符(在Java 7中引入)仅在上一个示例(
    new ArrayList()
    )中使用,以指示应推断构造函数调用的泛型类型参数。(没有菱形操作符表示构造了一个原始类型。)我认为一些IDE可能会用这种语法隐藏一个类型,但它实际上仍然存在?