gpt4 book ai didi

java - 在 IntelliJ IDEA 中扩展具有和不具有类型的泛型类会给出不同的实现方法吗?

转载 作者:太空宇宙 更新时间:2023-11-04 12:56:32 25 4
gpt4 key购买 nike

我试图扩展 Apache Flink 中具有以下签名的 org.apache.flink.api.common.io.FileInputFormat

public abstract class FileInputFormat<OT> extends RichInputFormat<OT, FileInputSplit> {}

为了完整起见,RichInputFormat 类的签名是,

public abstract class RichInputFormat<OT, T extends InputSplit> implements InputFormat<OT, T> {}

它(第一个类 - FileInputFormat)有两个抽象方法 public booleanreachEnd()public OT nextRecord(OTreuse)

现在,如果我将类型扩展为,

public class MyInputFormat<T> extends FileInputFormat<T>{}

然后,IntelliJ 正如预期的那样,建议(Ctrl+I)实现这两个抽象方法,这是正确的,也是编译程序所需要的。

但是,如果我将类型扩展为,

public class MyInputFormat extends FileInputFormat{}

然后 IntelliJ 建议在 InputFormat 接口(interface)中实现另外两个方法,这两个方法已在 FileInputFormat 类中实现。这些方法是 public InputSplitAssigner getInputSplitAssigner(InputSplit[] inputSplits)public void open(InputSplit split)

事实上,这些对于编译程序来说并不是必需的,尽管人们可能更愿意覆盖它们。

这种行为有什么逻辑推理吗?

最佳答案

我认为这是IntelliJ的一个特点。建议的两个附加方法取决于 super 接口(interface)“InputFormat”中定义的一些通用参数。

显然,当泛型类型被删除时,IntelliJ 假定应该重写其他方法。

这看起来几乎像一个小错误:在 Java 中使用原始类型时,类型参数应默认为其下限(此处“Object”代表“T”)。但在这种情况下,“FileInputFormat”(即“FileInputSlit”)的定义参数也被删除。

关于java - 在 IntelliJ IDEA 中扩展具有和不具有类型的泛型类会给出不同的实现方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35344806/

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