Retrieving Class Objects(下)

2019-04-01  本文已影响0人  日更专用小马甲

本系列翻译自Oracle官方教程,半翻译,半读后感性质。文末会附上原文链接。

上一篇 讲了通过4种途径获得可以获得Class的实例。那么有什么方法可以获得Classes呢?

前提是可以直接或者间接的获得Class的实例。

Class.getSuperclass()

返回超类的类实例。

// 返回JButton的超类,javax.swing.AbstractButton
Class c = javax.swing.JButton.class.getSuperclass();

Class.getClasses()

返回该类 及其包含继承关系的类 中(父类,父类的父类等),定义的所有 公共 的内部类,接口,枚举。

Class.getDeclaredClasses()

返回该类中所有的内部类,接口,枚举。

通过简单的实验可以对比一下二者的区别:

public class Foo {
    private class privateClassInFoo { }
    public class publicClassInFoo { }
}

public class Bar extends Foo {
    private class privateClassInBar { }
    public class publicClassInBar { }
}

public class Test extends Bar {
    private class privateClassInTest { }
    public class publicClassInTest { }

    public static void main(String[] args) {
        System.out.println("getClasses:");
        println(Test.class.getClasses());

        System.out.println();

        System.out.println("getDeclaredClasses:");
        println(Test.class.getDeclaredClasses());
    }

    private static void println(Class<?>[] classes) {
        for (Class c : classes) {
            System.out.println(c);
        }
    }
}

输出结果:

getClasses:
class Test$publicClassInTest
class Bar$publicClassInBar
class Foo$publicClassInFoo

getDeclaredClasses:
class Test$publicClassInTest
class Test$privateClassInTest

Class.getDeclaringClass()

返回哪个类中含有这个内部类。

Class.getEnclosingClass()

返回该类中的内部类。

原文链接:Retrieving Class Objects

上一篇下一篇

猜你喜欢

热点阅读