钻石操作符<>是否等于<?>

pet*_*ter 12 java generics

我在util.TreeSet类中发现其中一个构造函数正在使用new TreeMap泛型类型调用另一个构造函数.

  public TreeSet(Comparator<? super E> comparator) {
         this(new TreeMap<>(comparator));
  }
Run Code Online (Sandbox Code Playgroud)

什么new TreeMap<>意思?那相当于new TreeMap<?>

Rom*_*ain 17

这是Java 7语法.diamond(<>)是一个简短的方法,要求Java编译器用本地上下文中有意义的东西填充泛型参数(在这种情况下,它将是? super E).

  • @ user1389813使用Diamond的代码等于`<?在Java 7中,如果你使用Java 6或更少版本来编译它,你将得到编译器错误. (2认同)
  • "在这种情况下,它将是`?super E`"不,`新的TreeMap <?super E>()`无效 (2认同)