[英]Java Reflection Output
我得到了以下任务:
编写一个方法 displayMethodInfo(作为您选择的类的方法),具有以下签名: static void displayMethodInfo(Object obj); 该方法将 obj 的方法类型写入标准输出。 请根据以下示例格式化方法类型。 让 obj 成为以下类的一个实例:
class A { void foo(T1, T2) { ... } int bar(T1, T2, T3) { ... } static double doo() { ... } }
displayMethodInfo(obj) 的输出应如下所示:
foo (A, T1, T2) -> void bar (A, T1, T2, T3) -> int doo () -> double
如您所见,接收器类型应该是第一个参数类型。 声明为静态的方法没有接收器,因此不应将类类型显示为第一个参数类型。
我的这项作业的工作代码是:
import java.lang.Class;
import java.lang.reflect.*;
class Main3 {
public static class A {
void foo(int T1, double T2) { }
int bar(int T1, double T2, char T3) { return 1; }
static double doo() { return 1; }
}
static void displayMethodInfo(Object obj)
{
Method methodsList[] = obj.getClass().getDeclaredMethods();
for (Method y : methodsList)
{
System.out.print(y.getName() + "(" + y.getDeclaringClass().getSimpleName());
Type[] typesList = y.getGenericParameterTypes();
for (Type z : typesList)
System.out.print(", " + z.toString());
System.out.println(") -> " + y.getGenericReturnType().toString());
}
}
public static void main(String args[])
{
A a = new A();
displayMethodInfo(a);
}
}
这有效,但我的输出如下所示:
foo(A, int, double) -> void
bar(A, int, double, char) -> int
doo(A) -> double
如何更改它以使输出看起来像要求的那样?
如果我理解正确,您唯一的问题是将类类型作为静态 doo() 方法中的第一个参数。
您可以使用Modifier.isStatic()方法来检查:
boolean isStatic = Modifier.isStatic(y.getModifiers());
System.out.print(y.getName() + "("
+ (isStatic ? "" : y.getDeclaringClass().getSimpleName()));
那么你将不得不摆脱额外的逗号,但这不应该很难;)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.