java - 无法使用不同类型的参数实现接口(interface)

标签 java generics inheritance interface subclass

我有一个通用接口(interface) A<T> ,我有一个实现 A<String> 的 B 类.我创建了一个类 C延伸 B并实现 A<Number> . 对于 C ,我得到一个编译错误说:

A cannot be inherited with different type arguments <String> and <Number>.

为什么不允许这样做? 如果答案是 type erasure ,那么请详细解释。

示例代码:

public interface A<T> {

}

public class B implements A<String> {

}

public class C extends B implements A<Number> {
}

最佳答案

老实说,如果可以的话,那也没有意义。

场景如下:

  • B工具 A并绑定(bind) A<T>A<String> .
  • C继承自 B (它已经绑定(bind)到 A<String> ),并且您还试图实现 A<Number> .

你不能用两种方式实现一个类型。

如果你想合并Number以某种方式进入C ,那么您必须on C 类型而不仅仅是 A .

这会编译,但看起来会很奇怪:

public class C<T> extends B implements A<String> {

}

最终这真的归结为您的层次结构需要如何布局。如果您真的需要 B 之间的关系和 C ,那么以这种方式具体化它们的类型就没有意义;让他们使用 T作为通用代替。最后,凭借继承,你仍然可以访问A的总合约通过BC ,因此您无需实现它。

public interface A<T> {


}

public class B<T> implements A<T> {

}

public class C<T> extends B<T> {

}

关于java - 无法使用不同类型的参数实现接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41326735/

相关文章:

java - 删除 ctor 时通过反射设置私有(private)最终字段失败

java - CRFClassifier 无法识别句子分割器选项

Java 通用比较器未检查警告

c# - 从部分类 c# 调用 Base 实体构造函数

r - 如何使通用 R 函数继承其输入的类?

c# - 将子类添加到 List<parent> 时,特定于子类的数据是否丢失?

java - PrimeFaces DataTable "No records found"有记录时

java - 内存/注意力游戏问题

Java 泛型工厂模式

java - 获取List中元素的类型