有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java ANTLR4:参考书示例静态类定义

在书中的许多例子中,特别是在第7章中,有一群树行者和监听器,它们是通过使用这个定义来定义的:

public static class PropertyFileLoader extends PropretyFileBaseListener{
...
public static class PropertyFileVisitor extends PropertyFileBaseVisitor<Void>
...

为什么静电会在那里?它有什么作用

上面的链接是关于嵌套的内部类,我没有任何嵌套的内部类。。。我看不出使用static关键字和不使用static关键字有什么区别

antlr生成的自动生成类示例如下:

public class CymbolBaseListener implements CymbolListener {
    /**
     * {@inheritDoc}
     *
     * <p>The default implementation does nothing.</p>
     */
        @Override public void enterVarDecl(CymbolParser.VarDeclContext ctx){ }


public interface CymbolListener extends ParseTreeListener {
    /**
     * Enter a parse tree produced by {@link CymbolParser#rules}.
     * @param ctx the parse tree
     */
    void enterVarDecl(CymbolParser.VarDeclContext ctx);

其中ParseTreeListener附带antlr运行时ParseTreeListener

如果我想使用这些类,我要做的是:

public class MyListener extends CymbolBaseListener {
    public void enterVarDecl(CymbolParser.VarDeclContext ctx)
    {
        System.out.println("I have found a variable declaration!");
    }
}

让侦听器运行的方法是编写一个静态main,它执行以下操作:

public static void main(String[] args)
{
    ANTLRFileStream input = new ANTLRFileStream(args[0]);
    CymbolLexer mylexer = new CymbolLexer(input);
    CommonTokenStream tokens = new CommonTokenStream(mylexer);
    CymbolParser myparser = new CymbolParser(tokens);
    MyListener listener = new MyListener();
    ParseTreeWalker walker = new ParseTreeWalker();
    ParseTree tree = myparser.rules();
    walker.walk(listener, tree);
}

为什么作者让大多数示例使用static关键字:

public static class MyListener extends CymbolBaseListener

作为一个非静态类也可以使用。 我刚刚意识到书中的一些例子有静态关键字,而其他的没有,但我不明白背后的意图是什么


共 (0) 个答案