java - 名称冲突 - 具有相同的删除但既不覆盖方法参数泛型中的另一个

标签 java generics

我已经阅读了所有关于 Name clash - have the same erasure yet not override 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
}

如何解决?

最佳答案

问题是 Child 类声明重写了以下方法:

@Override
protected void setFooInstance(Instance<AdvancedFoo> instance) {} //Error here

但是 Parent 类声明了一个具有独特签名的 setFooInstance 方法:

protected void setFooInstance(Instance<? extends SimpleFoo> instance) {}

1) 以这种方式覆盖 Child 类:

public class Child extends Parent {

    @Override
    protected void setFooInstance(Instance<? extends SimpleFoo> instance){... }
}

或 2) 其他方式:如果你想强制子类中的重写方法声明一个特定的 SimpleFoo,使 Parent 类成为一个用 参数化的泛型类code>SimpleFoo 或其子类:

@Dependent
public class Parent <T extends SimpleFoo>{

    @Inject
    protected void setFooInstance(Instance<T> instance) {...}
}

现在可以声明 Child 类了:

@Dependent
public class Child extends Parent<AdvancedFoo> {

    @Override
    protected void setFooInstance(Instance<AdvancedFoo> instance) {...}  
}

关于java - 名称冲突 - 具有相同的删除但既不覆盖方法参数泛型中的另一个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45945346/

相关文章:

java - Mockito thenReturn 在来自泛型函数时返回 null

c# - 动态获取 Func<T,bool> 调用的结果

java - Swing:一列的多个 CellEditor

Java 套接字、回显服务器

java - 日期时间格式中的小写 z 返回偏移量,而不是缩写

generics - F# 中的泛型构造函数

swift - 使用具有自定义错误类型的 SignalProducer 时出现编译器错误

java - 是否可以在服务器上配置 c3p0 而不是 WAR 文件?

java - 在 Windows 中安装 Oracle 11g 时 JRE 设置但未执行

.net - 为什么 TreeSet<T> 是 .NET 中的内部类型?