gpt4 book ai didi

java - 无法编译实现没有类型参数的接口(interface)的类

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:51:51 33 4
gpt4 key购买 nike

我有以下测试代码:

public interface Container<I> {
public void addClass(Class<?> clazz);
}

public class MyContainer implements Container {
public void addClass(Class<?> clazz) {}
}

在尝试编译这两个类时出现以下错误:

MyContainer.java:1: MyContainer is not abstract and does not override abstract method addClass(java.lang.Class) in Container

如果我向 MyContainer 中的 Container 接口(interface)添加类型(例如 <Object> ),我不会收到错误。

问题是我将类型参数引入容器,它是公共(public) API 的一部分,因此为了兼容性,我不能让所有实现类都无法编译。

有人有什么想法吗?这是类型删除问题吗?有解决方法吗?

最佳答案

我认为问题在于,如果您在类声明中的任何地方使用原始类型,您就有点选择退出泛型。所以这会起作用——注意参数的变化。

public class MyContainer implements Container {
public void addClass(Class clazz) {}
}

来自 section 4.8 of the JLS :

The superclasses (respectively, superinterfaces) of a raw type are the erasures of the superclasses (superinterfaces) of any of its parameterized invocations.

相信那是相关的位...删除Container<T>.addClass(Class<?> clazz)addClass(Class clazz) .

但是是的,基本上除非这是真正的遗留代码,否则您应该将在接口(interface)中引入类型参数视为重大更改。

关于java - 无法编译实现没有类型参数的接口(interface)的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3838519/

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