如何使java反射程序输出看起来更好?

如何使java反射程序输出看起来更好?,java,reflection,Java,Reflection,我创建了一个类似于javap的java反射程序。一切正常,但我想知道是否有更好的方式显示输出。我的意思是,我喜欢去掉每个方法参数中的java.lang.String。这是我的方法。 例如,公共静态无效比较(字符串s) 下面是一个快速而肮脏的解决方案: for (Method method : clazz.getDeclaredMethods()) { StringBuilder output = new StringBuilder(); output.append(Modifie

我创建了一个类似于javap的java反射程序。一切正常,但我想知道是否有更好的方式显示输出。我的意思是,我喜欢去掉每个方法参数中的java.lang.String。这是我的方法。 例如,公共静态无效比较(字符串s)


下面是一个快速而肮脏的解决方案:

for (Method method : clazz.getDeclaredMethods()) {
    StringBuilder output = new StringBuilder();
    output.append(Modifier.toString(method.getModifiers()));
    if (method.getModifiers() != 0) {
        output.append(" ");
    }
    output.append(method.getReturnType().getSimpleName())
          .append(" ")
          .append(method.getName())
          .append("(");
    for (Parameter param : method.getParameters()) {
        output.append(Modifier.toString(param.getModifiers()));
        boolean firstParam = true;
        for (Parameter param : method.getParameters()) {
            if(!firstParam){
                output.append(", ");
            }
            firstParam = false;
            output.append(param.getType().getSimpleName());
        }
        output.append(param.getType().getSimpleName());
    }
    output.append(")");
    System.out.println(output);
}
公共静态最终字符串foo(int x,String y)的输出示例


输出包含返回类型而不是声明类型,但是您可以轻松地更改它。对于包含异常的更优化的输出,您可以查看的源代码,并根据需要对其进行调整

方法
上有很多方法,您可以使用它们生成更好的输出。包括通用感知
类型
实现。这完全取决于你想投入多少工作,以及你想要什么样的产出。
public boolean java.lang.String.equals(java.lang.Object) 
public java.lang.String java.lang.String.toString() 
public int java.lang.String.hashCode() 
public int java.lang.String.compareTo(java.lang.Object) 
public int java.lang.String.compareTo(java.lang.String) 
public int java.lang.String.indexOf(java.lang.String,int) 
static int java.lang.String.indexOf(char[],int,int,java.lang.String,int) 
static int java.lang.String.indexOf(char[],int,int,char[],int,int,int) 
for (Method method : clazz.getDeclaredMethods()) {
    StringBuilder output = new StringBuilder();
    output.append(Modifier.toString(method.getModifiers()));
    if (method.getModifiers() != 0) {
        output.append(" ");
    }
    output.append(method.getReturnType().getSimpleName())
          .append(" ")
          .append(method.getName())
          .append("(");
    for (Parameter param : method.getParameters()) {
        output.append(Modifier.toString(param.getModifiers()));
        boolean firstParam = true;
        for (Parameter param : method.getParameters()) {
            if(!firstParam){
                output.append(", ");
            }
            firstParam = false;
            output.append(param.getType().getSimpleName());
        }
        output.append(param.getType().getSimpleName());
    }
    output.append(")");
    System.out.println(output);
}
public static final String foo(int, String)