反射里,超级实用的代码

-------------这是通过用反制机制是调用set方法-----------------------------
Method mtd = classes.getDeclaredMethod("set"+ textAttribute.toUpperCase(),String.class);
mtd.invoke(ccid, textValue);
--------------这是通过用反制机制调用get方法------------------------------

// 根据对象获得所有字段的值
	public static void method(Object obj) {
		try {
			Class clazz = obj.getClass();
			Field[] fields = obj.getClass().getDeclaredFields();// 获得属性
			for (Field field : fields) {
				PropertyDescriptor pd = new PropertyDescriptor(field.getName(),
						clazz);
				Method getMethod = pd.getReadMethod();// 获得get方法
				Object o = getMethod.invoke(obj);// 执行get方法返回一个Object
				System.out.println(o);
			}
		} catch (Exception e) {
			e.printStackTrace();
		} 
	}
// 通过对象和具体的字段名字获得字段的值

	public static void method(Object obj, String filed) {
		try {
			Class clazz = obj.getClass();
			PropertyDescriptor pd = new PropertyDescriptor(filed, clazz);
			Method getMethod = pd.getReadMethod();// 获得get方法
			Object o = getMethod.invoke(obj);// 执行get方法返回一个Object
			System.out.println(o);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

//-----------------如果某类实体类继承了多个类,并想通过反射循环拿到所有父类的字段-----------------------
public static void main(String[] args) {
		VW_BUDGETVOUCHER budgetvoucher = new VW_BUDGETVOUCHER();
		Reflect_Object("com.mofit.framework.domain.budget.VW_BUDGETVOUCHER");
	}
	
    @SuppressWarnings("unchecked")
    public static void Reflect_Object(String classPath){
        try {            
            Class _class = Class.forName(classPath);// 加载类

            recursive(_class);
 
            System.out.println("====");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
@SuppressWarnings("unchecked")
public static Class recursive(Class _class){
    if(_class==null)
     return null;
     else{
        Method[] methods = _class.getDeclaredMethods();// 获得类的方法集合
        // 遍历方法集合
        for (int i = 0; i < methods.length; i++) {
            // 获取所有getXX()的返回值
            if (methods[i].getName().startsWith("get")) {// 方法返回方法名
                methods[i].setAccessible(true);//允许private被访问(以避免private getXX())
                Object object;
                try {
                    object = methods[i].invoke(o, null);
                    System.out.println(" " + methods[i].getName() + "=" + object);
                } catch (IllegalArgumentException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                } catch (IllegalAccessException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                } catch (InvocationTargetException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        }
        System.out.println("===="+_class.getName());
        return recursive(_class.getSuperclass());
     }
}

你可能感兴趣的:(反射里,超级实用的代码)