簡體   English   中英

Java 反射輸出

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM