我反汇编了一个.jar文件,最后得到了一些调用构造函数的文件:
public Interface_inheritance_specContext(ParserRuleContext parent, int invokingState) { super(invokingState); }
具有以下实现:
public ParserRuleContext(@Nullable ParserRuleContext parent, int invokingStateNumber) {
super(parent, invokingStateNumber);
}
编译后,将出现以下错误:
Error:(199, 92) java: no suitable constructor found for ParserRuleContext(int)
constructor org.antlr.v4.runtime.ParserRuleContext.ParserRuleContext() is not applicable
(actual and formal argument lists differ in length)
constructor org.antlr.v4.runtime.ParserRuleContext.ParserRuleContext(org.antlr.v4.runtime.ParserRuleContext,int) is not applicable
(actual and formal argument lists differ in length)
查看this问题,我看不到任何考虑@Nullable参数的答案。构造函数位于一个单独的.jar文件中,我希望我也不必对其进行反汇编。
我注意到,通过添加额外的null参数可以解决此问题。但是为什么首先给出错误?
最佳答案
您在问题中粘贴的ParserRuleContext的构造函数不是vararg构造函数,而是一个接受两个参数的构造函数,@ Nullable只是提到第一个参数可以为null。
因此,当您仅使用一个参数调用构造函数时,它无法识别单个参数构造函数,因此也将导致错误。