【问题标题】:Modfying methods variable using java parser in java file在java文件中使用java解析器修改方法变量
【发布时间】:2025-11-22 09:00:02
【问题描述】:

我正在使用 java 解析器来读取 java 文件。然后我对如何在每种方法中访问变量,然后在每种方法中修改变量名称和类型有疑问。

public static void main(String[] args) throws Exception {
    // creates an input stream for the file to be parsed
    FileInputStream in = new FileInputStream("test.java");

    CompilationUnit cu;
    try {
        // parse the file
        cu = JavaParser.parse(in);
    } finally {
        in.close();
    }

    // change the methods names and parameters
    changeMethods(cu);

    // prints the changed compilation unit
    System.out.println(cu.toString());
}

private static void changeMethods(CompilationUnit cu) {
    List<TypeDeclaration> types = cu.getTypes();
    for (TypeDeclaration type : types) {
        List<BodyDeclaration> members = type.getMembers();
        for (BodyDeclaration member : members) {
            if (member instanceof MethodDeclaration) {
                // what must i do?
            }
        }
    }
}

[更新]

更多细节,我有如下方法:

 private double[] getExtremeValues(double[] d) {    
    double min = Double.MAX_VALUE;  
    double max = -min;

}

在那个方法中,我只想用“double max1”修改“double max”。第二个问题,方法参数中如何获取'double[] d'? 请帮忙!谢谢

【问题讨论】:

标签: java methods javaparser


【解决方案1】:

您想修改方法中包含的所有变量吗?在这种情况下,您将需要使用递归或使用访问者(参见例如GenericVisitorAdapter)。

如果您只想更改参数,请查看MethodDeclaration 中的“getParameters”方法。

在这两种情况下,请注意仅更改变量的名称可能会破坏代码:您还需要更改对该变量的所有引用。

改变方法的类型是什么意思?这可以通过 MethodDeclaration 的 setType 方法轻松完成。

【讨论】:

    【解决方案2】:

    这是一个修改方法名称的示例。你需要重写一些方法

        private static class MethodNameModifier extends ModifierVisitor<Void> {
            @Override
            public MethodDeclaration visit(MethodDeclaration md, Void arg) {
                super.visit(md, arg);
                //System.out.println(md.getName());
                md.setName("x");
                return md;
            }
        }
    

    【讨论】:

      最近更新 更多