重述/简化:涉及重写方法的Java泛型

重述/简化:涉及重写方法的Java泛型,java,generics,Java,Generics,我有一个(对我来说)复杂的Java泛型问题。我以前在stackoverflow中问过一个问题,但得出的结论是,这个示例使事情变得过于复杂。这里是一个简化的问题 我有两门课,如下所示 abstract public class Base { abstract public Base doSomething(Base arg); } public class Variant extends Base { @Override public Variant doSomet

我有一个(对我来说)复杂的Java泛型问题。我以前在stackoverflow中问过一个问题,但得出的结论是,这个示例使事情变得过于复杂。这里是一个简化的问题

我有两门课,如下所示

abstract public class Base {
     abstract public Base doSomething(Base arg);
}

public class Variant extends Base {
     @Override
     public Variant doSomething(Variant arg) {  // <-- error
           // code
     }
}
抽象公共类基{
抽象公共基础剂量测定法(基础arg);
}
公共类变量扩展了基{
@凌驾
公共变量doSomething(Variant arg){/
抽象公共类基{
抽象公共T剂量测定法(T-arg);
}
公共类变量扩展了基{
@凌驾
公共变量doSomething(Variant arg){/
抽象公共类基{
抽象公共T剂量测定法(T-arg);
}
公共类变量扩展了基{
@凌驾
公共变量doSomething(Variant arg){/请不要投票如果您有函数
rf(p)
,则重写的方法f'可以将R限制为子类,但在调用f时只能将p限制为超类

计算机科学会说:结果类型是共变的,参数类型是逆变的(关于继承)

使p在基类中可参数化的解决方案是正确的:@AnatolyDeyneka.For内部逻辑R==p

doSomething
那么就不可能是那个变量。

请不要投票如果你有函数
rf(p)
那么被重写的方法f'可以将R限制为子类,但只要调用f,就只能将p限制为超类

计算机科学会说:结果类型是共变的,参数类型是逆变的(关于继承)

使p在基类中可参数化的解决方案是正确的:@AnatolyDeyneka.For内部逻辑R==p


doSomething
那么就不可能是那个变量。

类Variant extensed Base?
Variant
中的方法不会覆盖
Base
中的方法,因为参数类型不同-一个是另一个的子类型并不重要。
Variant
中的方法不会在
Base
中删除一个参数,因为参数类型不同-一个是另一个的子类型并不重要。有时,困难的事情是如此简单有时,困难的事情是如此简单
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
    }
}