具体类型作为参数的Java类

时间:2013-11-29 22:19:50

标签: java generics

将“具体”类型的类声明为泛型是否有任何意义?

如果是,它有什么用?

如果没有,编译器允许的任何具体原因是什么?

代码:

public class SomeClass<Integer> {  

    //...

    public static void main (String a[]) {
        // SomeClass <> iSome = new SomeClass<>();
        // SomeClass <Integer> jSome = new SomeClass<>();

        SomeClass <Double> kSome = new SomeClass<>();

        // ...
    }
}

运行正常,当我取消注释声明iSomejSome的行时,会出现编译器错误。

我正在努力将“解密”仿制品放在一起。

提前致谢。

2 个答案:

答案 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>();