美文网首页
Retrieving Class Objects(下)

Retrieving Class Objects(下)

作者: 日更专用小马甲 | 来源:发表于2019-04-01 14:06 被阅读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

    相关文章

      网友评论

          本文标题:Retrieving Class Objects(下)

          本文链接:https://www.haomeiwen.com/subject/htcmbqtx.html