gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 07:31:39 25 4
gpt4 key购买 nike

我有一个通用接口(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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com