【发布时间】:2021-08-27 08:16:55
【问题描述】:
我有一个定义如下的类层次结构:
class ClassA{}
class ClassB extends ClassA{}
class BaseClass
{
public <T extends ClassA> T method1(){ return null; }
public <T extends ClassA> T method2(T param1){ return null; }
}
我想扩展上面的 BaseClass 并覆盖 method1 和 method2 的实现,但我在 DerivedClass 中的方法签名上苦苦挣扎。这是我尝试过的:
class DerivedClass extends BaseClass
{
@Override
public ClassB method1() {return new ClassB();}
@Override
public ClassB method2(ClassB param1) {return new ClassB();}
}
对于method1,我收到警告:
Type safety: The return type ClassB for method1() from the type DerivedClass needs unchecked conversion to conform to T from the type BaseClass
对于method2,我收到以下错误:
The method method2(ClassB) of type DerivedClass must override or implement a supertype method
我该如何解决这个问题?
编辑:我不得不重构设计并将泛型类型放在BaseClass 而不是每个单独的方法上,这样就不会发生这种情况。
【问题讨论】:
-
这两个答案似乎都解决了您遇到的错误以及如何解决这些错误的问题。您应该编辑问题以包含更多上下文,以便我们了解为什么这些答案不适合您的情况。
-
@matt 更新了问题。