我在试着延长时间 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 boolean reachedEnd()
以及 public OT nextRecord(OT reuse)
现在,如果我用类型扩展为,
public class MyInputFormat<T> extends FileInputFormat<T>{}
然后intellij,如预期的那样,建议(ctrl+i)实现这两个抽象方法,这是正确的并且是编译程序所需要的。
但是,如果扩展时不使用类型as,
public class MyInputFormat extends FileInputFormat{}
然后intellij建议在 InputFormat
接口,已在中实现 FileInputFormat
班级。这些方法是 public InputSplitAssigner getInputSplitAssigner(InputSplit[] inputSplits)
以及 public void open(InputSplit split)
.
事实上,这些不是编译程序所必需的,尽管人们可能更愿意重写它们。
对这种行为有什么合理的解释吗?
1条答案
按热度按时间uhry853o1#
我认为这是intellij的一个特点。建议的另外两种方法依赖于超级接口“inputformat”中定义的一些泛型参数。
显然,intellij假设在删除泛型类型时,应该重写对其他方法的调用。
这看起来就像一个小bug:在java中使用原始类型时,类型参数应该默认为它们的下限(这里“object”表示“t”)。但在这种情况下,也会删除“fileinputformat”(即“fileinputsit”)的已定义参数。