java 类B构造函数参数是一个接口,我需要作为参数传递给这个接口的第四代继承构造函数

mspsb9vt  于 2023-02-02  发布在  Java
关注(0)|答案(2)|浏览(126)

有两行:
1.类“ANTLRInputStream”的示例被创建为“input”;
1.另一个LabLexer类的示例被创建为“lexer”,其中前一行的“input”对象被传入构造函数;“lexer”构造函数指定输入参数类型为CharStream,但CharStream是一个接口。此接口实现“ANTLRStringStream”类。后者有一个继承类-“ANTLReaderStream”,并且从第一行开始就有“ANTLRInputStream”。问题描述:“LabLexer”中的“LabLexer(org.antlr.v4.runtime.CharStream)”不能应用于“(org.antlr.runtime.ANTLRInputStream)”不幸的是,我不能更改代码,因为对我来说这是一个相当复杂的工具-代码是“根据说明”编写的。
我尝试更改变量的类型-不成功。添加新构造函数或更改现有的-也不成功(CharStream类型的变量在代码开始时初始化)。x1c 0d1x

gcmastyq

gcmastyq1#

ANTLRInputStream类是ANTLR v3类。您需要v4变体。请改为执行以下操作:

CharStream charStream = args.length > 0
    ? CharStreams.fromFileName(args[0])
    : CharStreams.fromStream(System.in);

LabLexer lexer = new LabLexer(charStream);
LabParser parser = new LabParser(new CommonTokenStream(lexer));
neskvpey

neskvpey2#

有趣的是,我很快就找到了一个解决方案。变量的类型必须是接口的名称。Char input = new ANTLRInputStream(arg);代替ANTLRInputStream,输入=新的ANTLRInputStream(参数);很抱歉问了这个愚蠢的问题,但我是Java新手))

相关问题