我想在不使用setter的情况下向Object变量插入值.怎么可能.
这是一个例子
Class X{ String variableName; // getters and setters }
现在我有一个函数,它包含变量名,要设置的值和Class X的Object.
我试图使用泛型方法将值设置为Object(objectOfClass),并在相应的变量(variableName)中传递值i(valueToBeSet).
Object functionName(String variableName,Object valueToBeSet,Object objectOfClass){ //I want to do the exact same thing as it does when setting the value using the below statement //objectOfClass.setX(valueToBeSet); return objectOfClass; }
解决方法
此代码未经过测试.你可以试试这个.
要导入的类
import java.beans.BeanInfo; import java.beans.IntrospectionException; import java.beans.Introspector; import java.beans.PropertyDescriptor; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method;
public Object functionName(String variableName,Object objectOfClass) throws IntrospectionException,NoSuchMethodException,SecurityException,IllegalAccessException,IllegalArgumentException,InvocationTargetException{ //I want to do the exact same thing as it does when setting the value using the below statement //objectOfClass.setX(valueToBeSet); Class clazz = objectOfClass.getClass(); BeanInfo beanInfo = Introspector.getBeanInfo(clazz,Object.class); // get bean info PropertyDescriptor[] props = beanInfo.getPropertyDescriptors(); // gets all info about all properties of the class. for (PropertyDescriptor descriptor : props) { String property = descriptor.getDisplayName(); if(property.equals(variableName)) { String setter = descriptor.getWriteMethod().getName(); Class parameterType = descriptor.getPropertyType(); Method setterMethod = clazz.getDeclaredMethod(setter,parameterType); //Using Method Reflection setterMethod.invoke(objectOfClass,valueToBeSet); } } return objectOfClass; }