这两个类声明之间是否有任何差异
1:
class MyClass <T extends Number & Comparable>
2:
class MyClass <T extends Number & Comparable<T>>
我认为存在分歧。但我找不到一个会显示差异的例子,因为我不完全理解。
你能告诉我这个例子吗?
答案 0 :(得分:5)
有区别。第一种是使用原始类型,因此类型安全性较低。例如:
这有效,但不应该起作用
class MyClass<T extends Number & Comparable>
{
void use(T t)
{
String s = null;
t.compareTo(s); // Works, but will cause a runtime error
}
}
虽然这不起作用(因为它 不起作用)
class MyClass<T extends Number & Comparable<T>>
{
void use(T t)
{
String s = null;
t.compareTo(s); // Compile-time error
}
}
编辑:完整代码,按要求:
class MyClass<T extends Number & Comparable>
{
void use(T t)
{
String s = "Laziness";
t.compareTo(s); // Works, but will cause a runtime error
}
}
public class MyClassTest
{
public static void main(String[] args)
{
MyClass<Integer> m = new MyClass<Integer>();
Integer integer = new Integer(42);
m.use(integer);
}
}