gpt4 book ai didi

java - 额外类型参数避免无效覆盖错误?

转载 作者:行者123 更新时间:2023-11-30 08:08:21 27 4
gpt4 key购买 nike

我有一个像这样的界面

public interface AnInterface {
Consumer<Object> getConsumer();
}

还有一个实现类,比如

public class AClass implements AnInterface {
@Override
public Consumer<String> getConsumer() {
return System.out::println;
}
}

Consumer<String> 以来,这(正确地)无法编译不扩展 Consumer<Object> .

但是,如果我将接口(interface)更改为在 getConsumer 上有一个额外的、未使用的类型参数,则错误消失并且编译正常:

<T> Consumer<Object> getConsumer();

这是怎么回事?!

JDK 1.8 u20 中的 javac 和 Luna 中的 Eclipse 编译器会出现这种情况。

最佳答案

代码编译的原因,当你添加类型参数时 <T> , 在这种情况下,您是否覆盖了 raw getConsumer()方法,即您没有重新定义类型参数( <T> ),但您只是忽略了它。

值得一提的是,在扩展原始类或覆盖原始方法时,整个 泛型信息只是被忽略了,这意味着在这种情况下编译器不会验证是否覆盖方法的类型参数 ( <String> ) 与抽象方法的类型参数 ( <Object> ) 兼容。

如果您保持该方法是通用的,它看起来像:

@Override
public <T> Consumer<String> getConsumer() {
...
}

然后编译器会更正并引发编译时错误。

关于java - 额外类型参数避免无效覆盖错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33191893/

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