【问题标题】:How to make a java reflection program output look better?如何让java反射程序输出看起来更好看?
【发布时间】:2014-10-10 22:52:37
【问题描述】:

我创建了一个类似于 javap 的 java 反射程序。一切正常,但我想知道是否有更好的方法来显示输出。我的意思是我喜欢在每个方法的争论中去掉 java.lang.String 。这是我的方法。 前任。 public static void 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) 

【问题讨论】:

  • Class&lt;?&gt;Method 上有很多方法可以用来生成更好的输出。包括通用感知 Type 实现。这完全取决于您要投入多少工作以及您追求什么样的输出。

标签: java reflection


【解决方案1】:

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

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() 的源代码并根据您的需要进行调整。

【讨论】:

    猜你喜欢
    • 2023-04-03
    • 2021-07-25
    • 1970-01-01
    • 1970-01-01
    • 2017-02-10
    • 2022-01-06
    • 2013-09-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多