浏览 1570 次
锁定老帖子 主题:Classes
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2009-05-14
最后修改:2009-05-14
在java.lang.reflect包下所有的类以及java.lang.reflect.ReflectPermission(当然它也是类),都没有一个公共的构造子.为了获取这些类的对象,Class类提供了相应的方法.所以我们说它是映射API的一个入口,正是基于此. 这里有几种方法来获取一个Class Object.getClass() 如果一个对象实例可用,那么一个最简单的方法去获取它的Class就是去调用Object.getClass().当然这仅仅适合于继承至java.lang.Object引用类型.如 Class c = "foo".getClass(); 再如获取虚拟机控制台的Class Class c = System.console().getClass(); 因为数组也是对象,所以可以对一个数组实例调用getClass()基本数据类型数组其Class分别是[C , [I, [S, [B等. byte[] bytes = new byte[1024]; Class c = bytes.getClass(); 枚举类型中A为E的一个实例所以返回的Class是类型E的Class enum E { A, B } Class c = A.getClass(); java.util.Set是java.util.HashSet的一个接口,用getClass()返回的值是java.util.HashSet import java.util.HashSet; import java.util.Set; Set<String> s = new HashSet<String>(); Class c = s.getClass(); .class 语法 如果一个类型可用,但是没有实例,此时可以用类型名加".class"来获取Class,这也是最简单的方法去获取基本数据类型的Class如下 : boolean b; Class c = b.getClass(); // compile-time error Class c = boolean.class; // correct 注意基本数据类型不是引用型的所以上一种会发生编译时错误. Class c = java.io.PrintStream.class; Class的变量c与类型java.io.PrintStream对应. Class c = int[][][].class; 对多维数组也可以获取其Class Class.forName() 如果一个类的完整名可用,可以使用Class的一个静态方法Class.forName()来获取对应的Class.不能用于基本数据类型. 如: Class c = Class.forName("com.duke.MyLocaleServiceProvider"); 这段语句会根据给定的全名来产生class CLass cDoubleArray = Class.forName("[D"); 获取double类型数组的Class,等同double[].class Class cStringArray = Class.forName("[[Ljava.lang.String;"); 获取二维String类型的class 适用于基本数据类型打包类的TYPE字段. 当然对于基本数据类型. class是一个更好的方法,但是也有一个另外的方法.在java.lang包下每一个基本数据类型以及void有一个打包类,它们用于对基本类型装箱到引用类型.每一个打包类包含一个叫作TYPE的字段等同于被打包的基本数据类型的Class.如: Class c = Double.TYPE; 等同于 Class c = double.class; 间接返回Classes的方法 这里有几个获取classes的反射API,但是仅仅当有一个Class被获取后.如: 返回一个被给类的超类 Class.getSuperclass(): Class c = javax.swing.JButton.class.getSuperclass(); 也就是先获取到javax.swing.JButton的Class然后在获取其父类的Class Class.getClasses()返回指定类所有的公开的类,接口,以及枚举类型包括被继承的成员. 如: Class<?>[] c = Character.class.getClasses(); Character包含两个成员类Character.Subset , Character.UnicodeBlock. Class.getDeclaredClasses() :返回所有明确申明在这个类中的所有的类,接口,枚举, 如:Class<?>[] c = Character.class.getDeclaredClasses(); Character包含两个公共的成员类Character.Subset , Character.UnicodeBlock 和一个私有的Character.CharacterCache 可有的形式: { Class, java.lang.reflect. { Field, Method, Constructor } }.getDeclaringClass() 如: import java.lang.reflect.Field; Field f = System.class.getField("out"); Class c = f.getDeclaringClass(); 得到System类型 Class.getEnclosingClass():返回这个类的直接的外部类 如: Class c = Thread.State.class.getEnclosingClass(); 返回State的外部类Thread 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |