我有一个(对我来说)复杂的 Java 泛型问题。我问过similar question之前在 stackoverflow 上看过,但得出的结论是这个例子让事情变得过于复杂。所以,这是一个简化的问题。
我有两个类(class),如下
abstract public class Base {
abstract public Base doSomething(Base arg);
}
public class Variant extends Base {
@Override
public Variant doSomething(Variant arg) { // <-- error
// code
}
}
错误消息是“Variant 类型的方法 doSomething(Variant) 必须重写或实现父类(super class)型方法。”
在 initial question 中选择的答案就是使用通用版本class Base<T extends Base<T>>
和class Variant<T extends Variant<T>> extends Base<T>
,有效。但是,如果我想创建 Variant 的实例,我需要提供一个泛型参数,即使我“不需要”一个。
有没有更简单的解决方案?
最佳答案
abstract public class Base<T extends Base<T>> {
abstract public T doSomething(T arg);
}
public class Variant extends Base<Variant> {
@Override
public Variant doSomething(Variant arg) { // <-- error
// code
}
}
关于java - 重述/简化 : Java generics involving overriding a method,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33231408/