如果我有这样一个我无法更改的基类:
public abstract class A {
public abstract Object get(int i);
}
我尝试用这样的类来扩展它B
:
public class B extends A{
@Override
public String get(int i){
//impl
return "SomeString";
}
}
一切都好。但是如果我尝试使它更通用的尝试失败:
public class C extends A{
@Override
public <T extends Object> T get(int i){
//impl
return (T)someObj;
}
}
我想不出任何理由为什么不应该这样做。在我的理解中,泛型类型T
绑定到一个Object
- 这是请求的返回类型A
。如果我可以将String
orAnyObject
作为我的返回类型 inside B
,为什么我不允许放在<T extends Object> T
我的C
班级中?
从我的角度来看,另一个奇怪的行为是这样的附加方法:
public class D extends A{
@Override
public Object get(int i){
//impl
}
public <T extends Object> T get(int i){
//impl
}
}
也不允许,带有提供的提示DuplicateMethod
。至少这一点让我感到困惑,我认为 Java 应该做出决定:如果是相同的返回类型,为什么不允许覆盖;如果不是,为什么我不能添加此方法?根据常识,告诉我它是相同的,但不允许它被覆盖,这很奇怪。