我反汇编了一个.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。

因此,当您仅使用一个参数调用构造函数时,它无法识别单个参数构造函数,因此也将导致错误。

10-05 22:07