java—在intellij idea中,扩展有类型和无类型的泛型类会给出不同的实现方法?

xytpbqjk  于 2021-06-25  发布在  Flink
关注(0)|答案(1)|浏览(429)

我在试着延长时间 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) .
事实上,这些不是编译程序所必需的,尽管人们可能更愿意重写它们。
对这种行为有什么合理的解释吗?

uhry853o

uhry853o1#

我认为这是intellij的一个特点。建议的另外两种方法依赖于超级接口“inputformat”中定义的一些泛型参数。
显然,intellij假设在删除泛型类型时,应该重写对其他方法的调用。
这看起来就像一个小bug:在java中使用原始类型时,类型参数应该默认为它们的下限(这里“object”表示“t”)。但在这种情况下,也会删除“fileinputformat”(即“fileinputsit”)的已定义参数。

相关问题