Java 在IntelliJ IDEA中,扩展有类型和无类型的泛型类会给出不同的实现方法?
我试图在ApacheFlink中扩展具有以下签名的Java 在IntelliJ IDEA中,扩展有类型和无类型的泛型类会给出不同的实现方法?,java,generics,intellij-idea,apache-flink,Java,Generics,Intellij Idea,Apache Flink,我试图在ApacheFlink中扩展具有以下签名的org.apache.flink.api.common.io.FileInputFormat类 public abstract class FileInputFormat<OT> extends RichInputFormat<OT, FileInputSplit> {} 它(第一个类-FileInputFormat)有两个抽象方法public boolean reachedEnd()和public OT nextRec
org.apache.flink.api.common.io.FileInputFormat
类
public abstract class FileInputFormat<OT> extends RichInputFormat<OT, FileInputSplit> {}
它(第一个类-FileInputFormat
)有两个抽象方法public boolean reachedEnd()
和public OT nextRecord(OT重用)
现在,如果我将类型扩展为
public class MyInputFormat<T> extends FileInputFormat<T>{}
public class MyInputFormat extends FileInputFormat{}
然后IntelliJ建议在InputFormat
接口中实现另外两种方法,它们已经在FileInputFormat
类中实现了。这些方法是公共InputSplitAssigner getInputSplitAssigner(InputSplit[]inputSplits)
和公共作废打开(InputSplit split)
事实上,这些是编译程序所必需的,尽管人们可能更愿意覆盖它们
对这种行为有何逻辑推理?我认为这是IntelliJ的一个特点。建议的另外两种方法取决于超级接口“InputFormat”中定义的某些通用参数 显然,IntelliJ假设在删除泛型类型时,应该重写对其他方法的调用 这看起来就像一个小错误:在Java中使用原始类型时,类型参数应该默认为其下限(这里“Object”表示“T”)。
但在这种情况下,“FileInputFormat”(即“FileInputSlit”)的定义参数也会被删除。我认为这是IntelliJ的一个特点。建议的另外两种方法取决于超级接口“InputFormat”中定义的某些通用参数 显然,IntelliJ假设在删除泛型类型时,应该重写对其他方法的调用 这看起来就像一个小错误:在Java中使用原始类型时,类型参数应该默认为其下限(这里“Object”表示“T”)。
但是在这种情况下,“FileInputFormat”(即“FileInputSlit”)的定义参数也会被删除。不使用类型进行扩展是没有意义的。如果
MyInputFormat
不应是泛型类,则需要指定要用于FileInputFormat的实际数据类型:public类MyInputFormat扩展FileInputFormat{}
是的,我理解。我只是想知道是什么导致了这种奇怪的行为?没有类型的扩展是没有意义的。如果MyInputFormat
不应是泛型类,则需要指定要用于FileInputFormat的实际数据类型:public类MyInputFormat扩展FileInputFormat{}
是的,我理解。我只是想知道是什么导致了这种奇怪的行为?
public class MyInputFormat extends FileInputFormat{}