我已经反汇编了.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参数解决了这个问题。但为什么首先给出错误?
答案 0 :(得分:3)
您在问题中粘贴的ParserRuleContext的构造函数不是vararg构造函数,但它是一个接受两个参数的构造函数,@ Nullable只是提到第一个参数可以为null。
因此,当您只使用一个参数调用构造函数时,它不会识别单个参数构造函数,从而识别错误。