在 class 中使用子类型作为类型参数
Using subtype as type parameter in class
考虑以下代码片段
public static <T> String typeName1(Class<T extends Object> c) {
return c.getSimpleName();
}
public static String typeName2(Class<? extends Object> c) {
return c.getSimpleName();
}
第一个显示编译时错误,而第二个编译成功。
为什么会这样?
把第一个改成这样:
public static <T extends Object> String typeName(Class<T> c) {
return c.getSimpleName();
}
它会起作用的。这就是你设置界限的不同之处。对于类型参数,您在声明类型参数的地方声明边界,而不是在使用它的地方声明边界。而对于通配符,由于没有这样的声明,您可以在使用它的地方给出界限。顺便说一句,<T extends Object>
可以是 <T>
.
public static <T> String typeName(Class<T> c) {
return c.getSimpleName();
}
考虑以下代码片段
public static <T> String typeName1(Class<T extends Object> c) {
return c.getSimpleName();
}
public static String typeName2(Class<? extends Object> c) {
return c.getSimpleName();
}
第一个显示编译时错误,而第二个编译成功。 为什么会这样?
把第一个改成这样:
public static <T extends Object> String typeName(Class<T> c) {
return c.getSimpleName();
}
它会起作用的。这就是你设置界限的不同之处。对于类型参数,您在声明类型参数的地方声明边界,而不是在使用它的地方声明边界。而对于通配符,由于没有这样的声明,您可以在使用它的地方给出界限。顺便说一句,<T extends Object>
可以是 <T>
.
public static <T> String typeName(Class<T> c) {
return c.getSimpleName();
}