/** * 反射 */ try { //获取目标class对象 (Class.forName()/ recordView.getClass() 效果相同) Class classView = ArcEntity.class; //使用默认构造函数创建目标类对象 Object object=classView.newInstance(); //获取类中的 key 私有属性,maxW是属性对象包含许多信息.(classView.getField("")只能获取开放访问权限属性) Field maxW=classView.getDeclaredField("key"); //想要访问私有属性/方法需要设置setAccessible(true) maxW.setAccessible(true); //maxW.get(object) 获取 key 属性值 /** * 获取属性初始值 */ Log.i("ImageActivity","maxW:"+maxW.get(object)); //给属性 key 赋值 /** * 给属性复制 */ maxW.set(object,"213"); //获取私有函数 getKey ,(classView.getMethod() 只能访问公开访问权限函数) Method method=classView.getDeclaredMethod("getKey"); //同上 method.setAccessible(true); //通过method对象调用函数 getKey ,没有参数传入空数组,invoke 函数返回值,没有返回值 null Object invoke=method.invoke(object,new Class<?>[0]); /** * 获取get方法返回值 */ Log.i("ImageActivity","getKey:"+invoke); //构造参数类型 String key="321"; Class<?>[] classes=new Class<?>[1]; classes[0]=key.getClass(); //获取有参函数 setKey ,classes 参数类型 Method method1=classView.getDeclaredMethod("setKey",classes); method1.setAccessible(true); //调用函数setKey 传入参数 并获取返回值 Object invoke1=method1.invoke(object,new String[]{key}); /** * 调用set方法赋值 */ Log.i("ImageActivity","setKey:"+invoke1); Method method2=classView.getDeclaredMethod("getKey"); method2.setAccessible(true); Object invoke2=method2.invoke(object,new Class<?>[0]); /** * 再调用get方法检查结果 */ Log.i("ImageActivity","getKey:"+invoke2); } catch (NoSuchFieldException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (InstantiationException e) { e.printStackTrace(); } catch (NoSuchMethodException e) { e.printStackTrace(); } catch (InvocationTargetException e) { e.printStackTrace(); }
public class ArcEntity { public ArcEntity(){ } public ArcEntity(float value,String key){ this.value=value; this.key=key; } public ArcEntity(float value,String key,String color){ this.value=value; this.key=key; this.color=color; } public float getValue() { return value; } private void setValue(float value) { this.value = value; } public String getKey() { return key; } private void setKey(String key) { this.key = key; } float value; String key="123"; String color; }
输出结果