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

标签 java generics intellij-idea apache-flink

我试图扩展 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/

相关文章:

Java多线程自增可以为负数吗?

java - 创建java通用数据结构

c# - 为什么 VS 警告我 typeof(T) 永远不是泛型方法中提供的类型,其中类型参数仅限于实现 T?

java - 在 IntelliJ 中运行 OptaPlanner 示例

Gitignore 不适用于 .xml 文件和/目标目录

java - Grails 2.4.2 域不会保存超过 8 个字段

java - 在这种情况下如何使用@JsonProperty - jackson API with lombok

java - Java 可以写入/读取已释放的堆外内存吗?

c++ - 指针和函数的部分特化

java - java.util.Map 的通用测试工具?