📄 reflector.java
字号:
/*
* Copyright (c) 2008 胜利油田胜利软件有限责任公司. All rights reserved.
*/
package com.victorysoft.swt.base;
import java.lang.reflect.Array;
import java.lang.reflect.Method;
import java.util.HashMap;
import java.util.Map;
/**
* 反射类
*
* @author 于景洋
* @newtime Oct 31, 2008,1:55:58 PM
* @version 1.0
* @see
* @since JDK 1.5.0
*/
public class Reflector {
@SuppressWarnings("unchecked")
private static Map<Class, Class> map = new HashMap<Class, Class>();
static{
map.put(Byte.class, byte.class);
map.put(Short.class, short.class);
map.put(Integer.class, int.class);
map.put(Long.class, long.class);
map.put(Float.class, float.class);
map.put(Double.class, double.class);
map.put(Boolean.class, boolean.class);
map.put(Character.class, char.class);
}
@SuppressWarnings("unchecked")
private static Class convert(Class clazz){
Class convertclazz = map.get(clazz);
if(convertclazz == null){
return clazz;
} else{
return convertclazz;
}
}
/**
* 得到某个对象的公共属性
*
* @param owner
* 对象
* @param field
* 属性名
* @return 返回方法执行结果,对无返回值的方法返回null
*/
@SuppressWarnings("unchecked")
public static Object getProperty(Object owner, String field) {
Class ownerClass = owner.getClass();
Object property = null;
try {
property = ownerClass.getField(field).get(owner);
} catch (Exception e) {
e.printStackTrace();
}
return property;
}
/**
* 得到某个对象的静态公共属性
*
* @param clazz
* 类
* @param field
* 属性名
* @return 返回方法执行结果,对无返回值的方法返回null
*/
@SuppressWarnings("unchecked")
public static Object getStaticProperty(Class clazz, String field) {
Object property = null;
try {
property = clazz.getField(field).get(clazz);
} catch (Exception e) {
e.printStackTrace();
}
return property;
}
/**
* 执行某对象的某无参方法
*
* @param owner
* 对象
* @param method
* 方法名
* @return 返回方法执行结果,对无返回值的方法返回null
*/
@SuppressWarnings("unchecked")
public static Object invokeMethod(Object owner, String method) {
return invokeMethod(owner, method, new Class[] {}, new Object[] {});
}
/**
* 执行某对象的某带一个参数的方法(基本数据类型参数按其数据包装类执行)
*
* @param owner
* 对象
* @param method
* 方法名
* @param object
* 参数
* @return 返回方法执行结果,对无返回值的方法返回null
*/
@SuppressWarnings("unchecked")
public static Object invokeMethod(Object owner, String method, Object object) {
return invokeMethod(owner, method, object.getClass(), object);
}
/**
* 执行某对象的某带一个参数的方法
*
* @param owner
* 对象
* @param method
* 方法名
* @param clazz
* 参数类型
* @param object
* 参数
* @return 返回方法执行结果,对无返回值的方法返回null
*/
@SuppressWarnings("unchecked")
public static Object invokeMethod(Object owner, String method, Class clazz,
Object object) {
Class[] classes = new Class[] { clazz };
Object[] objects = new Object[] { object };
return invokeMethod(owner, method, classes, objects);
}
/**
* 执行某对象的某带一组参数的方法(基本数据类型参数按其数据包装类执行)
*
* @param owner
* 对象
* @param method
* 方法名
* @param objects
* 参数集
* @return 返回方法执行结果,对无返回值的方法返回null
*/
@SuppressWarnings("unchecked")
public static Object invokeMethod(Object owner, String method,
Object[] objects) {
Class[] classes = new Class[objects.length];
for (int i = 0; i < objects.length; i++) {
classes[i] = objects[i].getClass();
}
return invokeMethod(owner, method, classes, objects);
}
/**
* 执行某对象的某带一组参数的方法
*
* @param owner
* 对象
* @param method
* 方法名
* @param classes
* 参数类型集
* @param objects
* 参数集
* @return 返回方法执行结果,对无返回值的方法返回null
*/
@SuppressWarnings("unchecked")
public static Object invokeMethod(Object owner, String method,
Class[] classes, Object[] objects) {
Object o = null;
try {
Method m = owner.getClass().getMethod(method, classes);
o = m.invoke(owner, objects);
} catch (Exception e) {
e.printStackTrace();
}
return o;
}
/**
* 执行某类的某无参静态公共方法
*
* @param ownerclazz
* 类
* @param method
* 方法名
* @return 返回方法执行结果,对无返回值的方法返回null
*/
@SuppressWarnings("unchecked")
public static Object invokeStaticMethod(Class ownerclazz, String method) {
Class[] classes = {};
Object[] objects = {};
return invokeStaticMethod(ownerclazz, method, classes, objects);
}
/**
* 执行某类的某个含一个参数的静态公共方法(基本数据类型参数按其数据包装类执行)
*
* @param ownerclazz
* 类
* @param method
* 方法名
* @param object
* 参数
* @return 返回方法执行结果,对无返回值的方法返回null
*/
@SuppressWarnings("unchecked")
public static Object invokeStaticMethod(Class ownerclazz, String method,
Object object) {
Class[] classes = { object.getClass() };
Object[] objects = { object };
return invokeStaticMethod(ownerclazz, method, classes, objects);
}
/**
* 执行某类的某个含一个参数的静态公共方法
*
* @param ownerclazz
* 类
* @param method
* 方法名
* @param clazz
* 参数类型
* @param object
* 参数
* @return 返回方法执行结果,对无返回值的方法返回null
*/
@SuppressWarnings("unchecked")
public static Object invokeStaticMethod(Class ownerclazz, String method,
Class clazz, Object object) {
Class[] classes = { clazz };
Object[] objects = { object };
return invokeStaticMethod(ownerclazz, method, classes, objects);
}
/**
* 执行某类的某个含一组参数的静态公共方法(基本数据类型参数按其数据包装类执行)
*
* @param ownerclazz
* 类
* @param method
* 方法名
* @param objects
* 参数集
* @return 返回方法执行结果,对无返回值的方法返回null
*/
@SuppressWarnings("unchecked")
public static Object invokeStaticMethod(Class ownerclazz, String method,
Object[] objects) {
Class[] classes = new Class[objects.length];
for (int i = 0, j = objects.length; i < j; i++) {
classes[i] = objects[i].getClass();
}
return invokeStaticMethod(ownerclazz, method, classes, objects);
}
/**
* 执行某类的某个含一组参数的静态公共方法
*
* @param ownerclazz
* 类
* @param method
* 方法名
* @param classes
* 参数类型集
* @param objects
* 参数集
* @return 返回方法执行结果,对无返回值的方法返回null
*/
@SuppressWarnings("unchecked")
public static Object invokeStaticMethod(Class ownerclazz, String method,
Class[] classes, Object[] objects) {
Object o = null;
try {
Method m = ownerclazz.getMethod(method, classes);
o = m.invoke(null, objects);
} catch (Exception e) {
e.printStackTrace();
}
return o;
}
/**
* 新建无参实例
*
* @param ownerclazz
* 类
* @return 返回新建实例
*/
@SuppressWarnings("unchecked")
public static Object newInstance(Class ownerclazz) {
Object o = null;
try {
o = ownerclazz.getConstructor().newInstance();
} catch (Exception e) {
e.printStackTrace();
}
return o;
}
/**
* 新建含一个参数的实例(基本数据类型参数按其数据包装类执行)
*
* @param ownerclazz
* 类
* @param object
* 参数
* @return 返回新建实例
*/
@SuppressWarnings("unchecked")
public static Object newInstance(Class ownerclazz, Object object) {
Class[] classes = { object.getClass() };
Object[] objects = { object };
return newInstance(ownerclazz, classes, objects);
}
/**
* 新建含一个参数的实例
*
* @param ownerclazz
* 类
* @param object
* 参数
* @return 返回新建实例
*/
@SuppressWarnings("unchecked")
public static Object newInstance(Class ownerclazz, Class clazz,
Object object) {
Class[] classes = { clazz };
Object[] objects = { object };
return newInstance(ownerclazz, classes, objects);
}
/**
* 新建含一组参数的实例(基本数据类型参数按其数据包装类执行)
*
* @param ownerclazz
* 类
* @param objects
* 参数集
* @return 返回新建实例
*/
@SuppressWarnings("unchecked")
public static Object newInstance(Class ownerclazz, Object[] objects) {
Class[] classes = new Class[objects.length];
for (int i = 0; i < objects.length; i++) {
classes[i] = objects.getClass();
}
return newInstance(ownerclazz, classes, objects);
}
/**
* 新建含一组参数的实例(基本数据类型参数按其数据包装类执行)
*
* @param ownerclazz
* 类
* @param classes
* 参数类型集
* @param objects
* 参数集
* @return 返回新建实例
*/
@SuppressWarnings("unchecked")
public static Object newInstance(Class ownerclazz, Class[] classes,
Object[] objects) {
Object o = null;
try {
o = ownerclazz.getConstructor(classes).newInstance(objects);
} catch (Exception e) {
e.printStackTrace();
}
return o;
}
/**
* 是不是某个类的实例
*
* @param object
* 实例
* @param clazz
* 类
* @return 如果object是此类的实例,则返回true
*/
@SuppressWarnings("unchecked")
public static boolean isInstance(Object object, Class clazz) {
return clazz.isInstance(object);
}
/**
* 得到数组中的某个元素
*
* @param array
* 数组
* @param index
* 索引
* @return 返回指定数组对象中索引组件的值
*/
public Object getByArray(Object array, int index) {
return Array.get(array, index);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -