本系列翻译自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()
返回该类中的内部类。
网友评论