Java 如何确定EclipseJDT中方法或字段的修饰符?

Java 如何确定EclipseJDT中方法或字段的修饰符?,java,abstract-syntax-tree,visitor-pattern,eclipse-jdt,modifier,Java,Abstract Syntax Tree,Visitor Pattern,Eclipse Jdt,Modifier,我正在为EclipseJDT编写一些简单的AST访问者。我有一个MethodVisitor和FieldVisitor类,每个类都扩展了ASTVisitor。以MethodVisitor为例。在那个类'Visitmethod(这是一个覆盖)中,我能够找到每个MethodDeclaration节点。当我有一个这样的节点时,我想查看它的修饰符,看看它是public还是private(也许还有其他修饰符)。有一个名为getModifiers()的方法,但我不清楚如何使用它来确定应用于特定MethodDe

我正在为EclipseJDT编写一些简单的AST访问者。我有一个
MethodVisitor
FieldVisitor
类,每个类都扩展了
ASTVisitor
。以
MethodVisitor
为例。在那个类'
Visit
method(这是一个覆盖)中,我能够找到每个
MethodDeclaration
节点。当我有一个这样的节点时,我想查看它的
修饰符
,看看它是
public
还是
private
(也许还有其他修饰符)。有一个名为
getModifiers()
的方法,但我不清楚如何使用它来确定应用于特定
MethodDeclaration
的修饰符类型。我的代码贴在下面,请让我知道如果你有任何想法如何继续

import java.util.ArrayList;
import java.util.List;

import org.eclipse.jdt.core.dom.ASTVisitor;
import org.eclipse.jdt.core.dom.MethodDeclaration;

public class MethodVisitor extends ASTVisitor {

    private List<MethodDeclaration> methods;

    // Constructor(s)
    public MethodVisitor() {
        this.methods = new ArrayList<MethodDeclaration>();
    }

    /**
     * visit - this overrides the ASTVisitor's visit and allows this
     * class to visit MethodDeclaration nodes in the AST.
     */
    @Override
    public boolean visit(MethodDeclaration node) {
        this.methods.add(node);

            //*** Not sure what to do at this point ***
            int mods = node.getModifiers();

        return super.visit(node);
    }

    /**
     * getMethods - this is an accessor methods to get the methods
     * visited by this class.
     * @return List<MethodDeclaration>
     */
    public List<MethodDeclaration> getMethods() {
        return this.methods;
    }
}
import java.util.ArrayList;
导入java.util.List;
导入org.eclipse.jdt.core.dom.ASTVisitor;
导入org.eclipse.jdt.core.dom.MethodDeclaration;
公共类MethodVisitor扩展了一个类Visitor{
私有列表方法;
//建造商
公众访客(){
this.methods=new ArrayList();
}
/**
*访问-这会覆盖访客的访问,并允许
*类访问AST中的MethodDeclaration节点。
*/
@凌驾
公共布尔访问(MethodDeclaration节点){
此.methods.add(节点);
//***现在不知道该怎么办***
int mods=node.getModifiers();
返回超级访问(节点);
}
/**
*getMethods-这是获取方法的访问器方法
*这个班级参观过。
*@返回列表
*/
公共列表getMethods(){
返回此.methods;
}
}

如文档所述,调用
getModifiers()
的结果是相关常量的“或”位。例如,如果您想确定该方法是否为
final
,您可以使用:

int modifiers = node.getModifiers();
if (modifiers & Modifier.FINAL != 0) {
    // It's final
}
或者您可以使用
修饰符
类中的方便方法:

int modifiers = node.getModifiers();
if (Modifier.isFinal(modifiers)) {
    // It's final
}

还有另外一个helper方法
modifiers()
,它提供了方法所具有的修饰符列表。要检查它是否为
final
,您可以直接签入该列表

for(Object o : methodDeclarationNode.modifiers()) {  
   if(o.toString().equals("final")) {
      return true;
   }
}