重述/简化:涉及重写方法的Java泛型
我有一个(对我来说)复杂的Java泛型问题。我以前在stackoverflow中问过一个问题,但得出的结论是,这个示例使事情变得过于复杂。这里是一个简化的问题 我有两门课,如下所示重述/简化:涉及重写方法的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
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
}
}