获得声明的方法 - Java的(Getting Declared Methods - Java)

2019-10-17 16:44发布

假设我有以下三类

A.java

public class A {
    public static void main (String[] args) {
        new C();
    }
}

B.java

import java.lang.reflect.Method;
import java.util.Arrays;

public class B {
    public B() {
        Method[] m = this.getClass().getDeclaredMethods();
        System.out.println(Arrays.toString(m));
    }

    public void hello() {

    }
}

C.java

public class C extends B{
    public C() {
        super();
    }
}

我运行A类井的主要方法,它应该实例C类,这反过来应该调用B类的构造函数,打印出声明的方法。 输出是[] 这是一个让我吃惊,因为我期待的输出为(假定所有的类都在包叫做test ):

[public void test.B.hello()]

那么,什么是错的? 而且我怎么会这样,这是实际的输出?

Answer 1:

getClass返回该类的实例。 在这种情况下,这是C 。 有一个在类中没有声明的方法C 。 您可以通过使用也返回的“getSuperclass之”的方法解决你的问题Class对象:

Class c = this.getClass();
while (c != null) {
  System.out.println(Arrays.toString(c.getDeclaredMethods()));
  c = c.getSuperClass();
}


Answer 2:

这里的关键是使用这个词的this这意味着目前情况下,这要是C是的具体子类BC 。 为了得到B's方法,你需要遍历,直到你到达B.这可能是相关的应用程序逻辑。 一种方法是如下。

import java.lang.reflect.Method;
import java.util.Arrays;

public class B {
    public B() {
        Class<?> parent = getClass();
        while(parent.getSuperclass() != null) {
            if(parent.getSuperclass() != Object.class) {
                parent = parent.getSuperclass();
            } else {
                break;
            }
        }
        Method[] m = parent.getDeclaredMethods();
        System.out.println(Arrays.toString(m));
    }

    public void hello() {

    }
}


Answer 3:

//其实可以得到不同类别方法//不同的包下数....
//去检查结果................

import java.lang.reflect.Method;


    public class TestPackage {
        public static void main(String args[]) throws ClassNotFoundException
        {
            int count=0;
            Class c=Class.forName("java.util.Scanner");
            Method[] m=c.getDeclaredMethods();
            for(Method m1:m)
            {
                count++;
                System.out.println(m1.getName());
            }
            System.out.println("The no. of methods are:"+count);

        }

    }


文章来源: Getting Declared Methods - Java