add
此类中的两个方法具有相同的擦除签名:
class extend
{
Integer add (Integer a, Integer b)
{
return a + b;
}
<Type extends Integer> Type add (Type a, Type b)
{
return a + b;
}
}
这使得它们不可能在同一个类中。编译器报告以下错误:
extend.java:8:错误:名称冲突:add(Type,Type) 和 add(Integer,Integer) 具有相同的擦除 类型添加(类型a,类型b) ^ 其中 Type 是一个类型变量: 类型扩展在方法 add(Type,Type) 中声明的 Integer
但是如果它们是等价的,为什么在第二种情况下不进行拆箱。编译器报告以下错误:
extend.java:10:错误:不兼容的类型 返回 a + b; ^ 必需:类型 发现:int 其中 Type 是一个类型变量: 类型扩展在方法 add(Type,Type) 中声明的 Integer
在第一种情况下,编译器知道擦除的类型,而在第二种情况下,他又忘记了?为什么?