我获得了以下任务:
编写一个方法displayMethodInfo(作为你的一个类的方法) 选择),具有以下签名:静态无效 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
如您所见,接收器类型应该是第一个参数类型。 声明为static的方法没有接收器,因此不应该 将类类型显示为第一个参数类型。
此作业的工作代码是:
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
如何更改此设置以使输出看起来像所要求的那样?
答案 0 :(得分:1)
如果我理解正确,你唯一的问题是将类类型作为静态doo()方法中的第一个参数。
您可以使用Modifier.isStatic()方法检查:
boolean isStatic = Modifier.isStatic(y.getModifiers());
System.out.print(y.getName() + "("
+ (isStatic ? "" : y.getDeclaringClass().getSimpleName()));
然后你必须摆脱额外的逗号,但这不应该是难的;)