我已阅读有关的所有问题和答案,Name clash - have the same erasure yet neither overrides the other但仍然无法理解如何解决问题。所以,
@Dependent
public class SimpleFoo {}
@Dependent
public class AdvancedFoo extends SimpleFoo {}
@Dependent
public class Parent {
@Inject
protected void setFooInstance(Instance<? extends SimpleFoo> instance) {}
}
@Dependent
public class Child extends Parent {
@Override
protected void setFooInstance(Instance<AdvancedFoo> instance) {} //Error here
}
Run Code Online (Sandbox Code Playgroud)
如何解决?
问题是该类Child声明重写以下方法:
@Override
protected void setFooInstance(Instance<AdvancedFoo> instance) {} //Error here
Run Code Online (Sandbox Code Playgroud)
但该类Parent声明了一个setFooInstance 具有不同签名的方法:
protected void setFooInstance(Instance<? extends SimpleFoo> instance) {}
Run Code Online (Sandbox Code Playgroud)
Child1)以这种方式覆盖该类:
public class Child extends Parent {
@Override
protected void setFooInstance(Instance<? extends SimpleFoo> instance){... }
}
Run Code Online (Sandbox Code Playgroud)
或2)其他方式:如果您想强制子类中的重写方法声明特定的方法SimpleFoo,请使该类成为Parent用其SimpleFoo或其子类参数化的泛型类:
@Dependent
public class Parent <T extends SimpleFoo>{
@Inject
protected void setFooInstance(Instance<T> instance) {...}
}
Run Code Online (Sandbox Code Playgroud)
现在Child可以声明该类:
@Dependent
public class Child extends Parent<AdvancedFoo> {
@Override
protected void setFooInstance(Instance<AdvancedFoo> instance) {...}
}
Run Code Online (Sandbox Code Playgroud)