原始类型上下文中的菱形运算符

2023-11-23

今天看到这样的代码:

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(使用前将#替换为@)

原始类型上下文中的菱形运算符 的相关文章

随机推荐