Java基础编程:反射工具类
2015-07-03 17:56
447 查看
package com.test.java; import java.lang.reflect.Array; import java.lang.reflect.Constructor; import java.lang.reflect.Field; import java.lang.reflect.Method; public class Reflection { /** * 得到某个对象的公共属性 * * @param owner * , fieldName * @return 该属性对象 * @throws Exception * */ public Object getProperty(Object owner, String fieldName) throws Exception { Class<? extends Object> ownerClass = owner.getClass(); Field field = ownerClass.getField(fieldName); Object property = field.get(owner); return property; } /** * 得到某类的静态公共属性 * * @param className * 类名 * @param fieldName * 属性名 * @return 该属性对象 * @throws Exception */ public Object getStaticProperty(String className, String fieldName) throws Exception { Class<?> ownerClass = Class.forName(className); Field field = ownerClass.getField(fieldName); Object property = field.get(ownerClass); return property; } /** * 执行某对象方法 * * @param owner * 对象 * @param methodName * 方法名 * @param args * 参数 * @return 方法返回值 * @throws Exception */ @SuppressWarnings("unchecked") public Object invokeMethod(Object owner, String methodName, Object[] args) throws Exception { Class<? extends Object> ownerClass = owner.getClass(); Class[] argsClass = new Class[args.length]; for (int i = 0, j = args.length; i < j; i++) { argsClass[i] = args[i].getClass(); } Method method = ownerClass.getMethod(methodName, argsClass); return method.invoke(owner, args); } /** * 执行某类的静态方法 * * @param className * 类名 * @param methodName * 方法名 * @param args * 参数数组 * @return 执行方法返回的结果 * @throws Exception */ @SuppressWarnings("unchecked") public Object invokeStaticMethod(String className, String methodName, Object[] args) throws Exception { Class<?> ownerClass = Class.forName(className); Class[] argsClass = new Class[args.length]; for (int i = 0, j = args.length; i < j; i++) { argsClass[i] = args[i].getClass(); } Method method = ownerClass.getMethod(methodName, argsClass); return method.invoke(null, args); } /** * 新建实例 * * @param className * 类名 * @param args * 构造函数的参数 * @return 新建的实例 * @throws Exception */ @SuppressWarnings("unchecked") public Object newInstance(String className, Object[] args) throws Exception { Class<?> newoneClass = Class.forName(className); Class[] argsClass = new Class[args.length]; for (int i = 0, j = args.length; i < j; i++) { argsClass[i] = args[i].getClass(); } Constructor<?> cons = newoneClass.getConstructor(argsClass); return cons.newInstance(args); } /** * 是不是某个类的实例 * * @param obj * 实例 * @param cls * 类 * @return 如果 obj 是此类的实例,则返回 true */ public boolean isInstance(Object obj, Class<?> cls) { return cls.isInstance(obj); } /** * 得到数组中的某个元素 * * @param array * 数组 * @param index * 索引 * @return 返回指定数组对象中索引组件的值 */ public Object getByArray(Object array, int index) { return Array.get(array, index); } }
本文转自:/article/7650439.html
相关文章推荐
- 深入理解Java的接口和抽象类
- Java - What is Abstraction in Java
- java中重载与重写的区别
- JAVA实现图片裁剪
- JAVA对象属性复制
- 搭建和配置Spring与jdbc整合的环境
- Java NumberFormat 类
- Android Studio vs. Eclipse: What You Need To Know
- eclipse安装maven插件
- [转] Java快速教程
- Spring MVC 3.0 深入及对注解的详细讲解
- Oauth2.0 用Spring-security-oauth2 非常简单
- Spring Security 与 Oauth2 整合 步骤
- java垃圾回收机制(二)
- Java - What is Static and Dynamic binding
- Eclipse导出项目兼容androidstudio
- Caused by: java.lang.UnsatisfiedLinkError: Couldn't load BaiduMapSDK_v3_0_0 from loader dalvik.syste
- java 垃圾回收机制(一)
- Java生成和解析XML格式文件和字符串的实例代码
- 自动装箱与拆箱功能