9.4.3 Java7的“菱形”语法与泛型构造器
9.4.3 Java7的“菱形”语法与泛型构造器
正如泛型方法允许在方法签名中声明泛型形参一样,Java
也允许在构造器签名中声明泛型形参,这样就产生了所谓的泛型构造器。
一旦定义了泛型构造器,接下来在调用构造器时,就不仅可以让Java
根据数据参数的类型来“推断”泛型形参的类型,而且程序员也可以显式地为构造器中的泛型形参指定实际的类型。如下程序所示。
1 | class Foo { |
上面程序中1号代码不仅显式指定了泛型构造器中的泛型形参T的类型应该是String
,而且程序传给该构造器的参数值也是String
类型,因此程序完全正常。
但在2号代码 处,程序显式指定了泛型构造器中的泛型形参T的类型应该是String
,但实际传给该构造器的参数值是Double
类型,因此这行代码将会出现错误。
显式指定了泛型构造器中声明的泛型形参的实际类型,则不可以使用“菱形”语法
前面介绍过Java7
新增的“菱形”语法,它允许调用构造器时在构造器后使用一对尖括号来代表泛型信息。但如果程序显式指定了泛型构造器中声明的泛型形参的实际类型,则不可以使用“菱形”语法。如下程序所示。
1 | class MyClass<E> { |
上面程序中1号代码既指定了泛型构造器中的泛型形参是 Integer
类型,又想使用“菱形”语法,所以这行代码无法通过编译。