温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Java反射经典实例 Java Reflection Cookbook

发布时间:2020-08-17 18:53:39 来源:ITPUB博客 阅读:184 作者:smfflynj 栏目:编程语言
http://www.duduwolf.com/wiki/2006/85.html[@more@]import java.lang.reflect.Array;import java.lang.reflect.Constructor;import java.lang.reflect.Field;import java.lang.reflect.Method;

/**
* Java Reflection Cookbook
*
*
@author Michael Lee
*
@since 2006-8-23
*
@version 0.1a
*/
publicclass Reflection {
/**
* 得到某个对象的公共属性
*
*
@param owner, fieldName
*
@return 该属性对象
*
@throws Exception
*
*/
public Object getProperty(Object owner, String fieldName) throws Exception {
Class 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
*/
public Object invokeMethod(Object owner, String methodName, Object[] args)
throws Exception {

Class 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
*/
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
*/
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
*/
publicboolean 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);
}
}
向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI