`
屌丝学Java
  • 浏览: 28506 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

java: 关于反射

    博客分类:
  • Java
 
阅读更多
前段时间维护系统遇到的一个问题:在服务器上运行的程序有问题,本机却没问题。 查看服务器日志:set方法参数类型不匹配。 Debug后发现是在BeanUtil的set方法上出的问题。涉及java的反射应用,可能是反射对int等基本数据类型不是完全支持(但,在本机上问什么没问题呢?)。操作不了服务器,没做实际测试。 网上搜索了关于Java反射的一些知识。 Java反射机制是 Java 语言被视为准动态语言的关键性质。 J ava反射机制的核心就是允许在运行时通过 Java Reflection APIs 来取得已知名字的 class 类的相关信息,动态地生成此类,并调用其方法或修改其域(甚至是本身声明为 private 的域或方法)。 因此,要想使用Java 反射,我们首先得到 Class 类的对象。下表列出了几种得到 Class 类的方法,以供大家参考。 Class object 诞生管道 示例 运用getClass() 注:每个class 都有此函数 String str = "abc"; Class c1 = str.getClass(); 运用 Class.getSuperclass() Button b = new Button(); Class c1 = b.getClass(); Class c2 = c1.getSuperclass(); 运用static method Class.forName() (最常被使用) Class c1 = Class.forName ("java.lang.String"); Class c2 = Class.forName ("java.awt.Button"); Class c3 = Class.forName ("java.util.LinkedList$Entry"); Class c4 = Class.forName ("I"); Class c5 = Class.forName ("[I"); 运用 .class 语法 Class c1 = String.class; Class c2 = java.awt.Button.class; Class c3 = Main.InnerClass.class; Class c4 = int.class; Class c5 = int[].class; 运用 primitive wrapper classes 的TYPE 语法 Class c1 = Boolean.TYPE; Class c2 = Byte.TYPE; Class c3 = Character.TYPE; Class c4 = Short.TYPE; Class c5 = Integer.TYPE; Class c6 = Long.TYPE; Class c7 = Float.TYPE; Class c8 = Double.TYPE; Class c9 = Void.TYPE; 获取一些基本信息 在我们得到一个类的Class 类对象之后, Java 反射机制就可以大施拳脚了。首先让我们来了解下如何获取关于某一个类的一些基本信息。 Java class 内部模块 Java class 内部模块说明 相应之Reflection API,多半为Class methods。 返回值类型(return type) package class隶属哪个package getPackage() Package import class导入哪些classes 无直接对应之API。 可间接获取。 modifier class(或methods, fields)的属性 int getModifiers() Modifier.toString(int) Modifier.isInterface(int) int String bool class name or interface name class/interface 名称getName() String type parameters 参数化类型的名称 getTypeParameters() TypeVariable [] base class base class(只可能一个) getSuperClass() Class implemented interfaces 实现有哪些interfaces getInterfaces() Class[] inner classes 内部classes getDeclaredClasses() Class[] outer class 如果我们观察的class 本身是inner classes,那么相对它就会有个outer class。 getDeclaringClass() Class 上表中,列出了一些Java class 内部信息的获取方式。所采用的方法几乎都是调用 Class 对象的成员方法(由此你就可以了解到 Class 类的用处了吧)。当然,表中所列出的信息并不是全部,有很大一部分没有列出,你可以通过查阅 Java 文档得到更全面的了解。另外,下面将重点介绍一下类的构造函数、域和成员方法的获取方式。
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics