今天看到这样的代码:
public class GenClass<T> { ... }
//in some other class
GenClass g = new GenClass<>();
是否<>
在这里有什么成就吗?通常情况下<>
会告诉编译器根据上下文确定通用参数,但在这种情况下没有上下文。但显然这是合法的。这和下面的有什么区别吗?
GenClass g = new GenClass();
菱形正在做它一贯做的事情 - 从上下文推断泛型类型,并保证构造函数调用不会损害类型安全。
考虑这个例子:
public class GenClass<T> {
GenClass(T t, List<T> list) {}
public static void main(String[] args) {
GenClass m = new GenClass<>(1, new ArrayList<String>()); // Doesn't compile
}
}
此示例无法编译,因为无法推断出适当的类型。如果删除菱形,它会编译,因为构造函数参数的类型是删除的版本(Object
and List
).
在你的例子中,构造函数不接受任何参数,因此没有什么需要检查的。然而,使用菱形是一个值得养成的好习惯,即使您选择将构造函数调用的结果分配给Object
或原始类型(并不是说您应该使用原始类型)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)