[英]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.