繁体   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