我创建了一个类似于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)
答案 0 :(得分:0)
这是一个快速而肮脏的解决方案:
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()的源代码并根据您的需要进行调整。