繁体   English   中英

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

[英]How to make a java reflection program output look better?

我创建了一个类似于javap的Java反射程序。 一切正常,但我想知道是否有更好的方法来显示输出。 我的意思是,无论哪种方法,我都喜欢取出java.lang.String。 这是我的方法。 例如 公共静态无效compareTo(String s)

public static void displayMethods(String s)
                throws ClassNotFoundException
{
    Class<?> c1 = Class.forName(s);
    Method [] con = c1.getDeclaredMethods();
    for(Method c: con)
        println(c);
}

这是我的输出

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 x, String y)示例输出:

public static final String foo(int, String)

输出包含返回类型而不是声明类型,但是您可以轻松更改它。 为了获得更优化的输出(其中还包含异常),您可以查看Method.toString()的源代码并使其适应您的需求。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM