在這個類兩種add
方法具有相同的擦除簽名:爲什麼不能在Java中取消刪除類型?
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: error: name clash: add(Type,Type) and add(Integer,Integer) have the same erasure Type add (Type a, Type b) ^ where Type is a type-variable: Type extends Integer declared in method add(Type,Type)
但如果他們是等價的,爲什麼在第二種情況下沒有做拆箱。編譯器報告以下錯誤:
extend.java:10: error: incompatible types return a + b; ^ required: Type found: int where Type is a type-variable: Type extends Integer declared in method add(Type,Type)
在第一種情況下,編譯器知道擦除類型,並在第二種情況下,他再次忘記它?爲什麼?
無論如何,鑑於'Integer'是一個最終的類,有一個具有'extends Integer'邊界的泛型類型有什麼好處?如果語言甚至不嘗試僅僅因爲沒有用就支持泛型類型的兩個值之間的加法,我就不會感到驚訝。 –