将“具体”类型的类声明为泛型是否有任何意义?
如果是,它有什么用?
如果没有,编译器允许的任何具体原因是什么?
代码:
public class SomeClass<Integer> {
//...
public static void main (String a[]) {
// SomeClass <> iSome = new SomeClass<>();
// SomeClass <Integer> jSome = new SomeClass<>();
SomeClass <Double> kSome = new SomeClass<>();
// ...
}
}
运行正常,当我取消注释声明iSome
和jSome
的行时,会出现编译器错误。
我正在努力将“解密”仿制品放在一起。
提前致谢。
答案 0 :(得分:8)
这不是你的想法。您正在创建名为Integer
的通用类型参数,该参数会隐藏java.lang.Integer
。
答案 1 :(得分:1)
在类定义中,您调用Integer
的参数也可以只是T
而不改变意义。
AFIK你可以省略Java 7中的泛型,编译器会自动添加它,但无论如何都不会在运行时存储。因此,您必须在左手定义中定义泛型,唯一的例外是使用用作通配符的问号。
// here is the generic missing the compiler cannot guess it:
SomeClass<> iSome = new SomeClass<>();
// here does the compiler know that you want a Double
SomeClass<Double> jSome = new SomeClass<>();
// this will also work
SomeClass<?> kSome = new SomeClass<Boolean>();