java - 重述/简化 : Java generics involving overriding a method

标签 java generics

我有一个(对我来说)复杂的 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/

相关文章:

java - 如何使用 Intent 将具有不可序列化子对象的可序列化对象从一个 Android Activity 发送到另一个 Activity

java - 在基于 php 的应用程序中嵌入 DITA Open Toolkit

java - TZupdater 因 tzdata2016g 版本而失败

generics - 使用 'is' 检查 Dart 泛型的运行时类型

java - 使用反射为泛型类型变量生成 lambda 类

java - Struts 2 将数据从 JSP 传递到操作类

java - 循环内的监听器不允许更改外部 boolean 标志

c# - 对通用接口(interface)的抽象引用

java - 如果main方法被参数化了,那么如何指定它的真实类型呢?

java - Java 中的泛型子类型化问题