加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 如何在不使用setter的情况下将值设置为类变量

发布时间:2020-12-14 05:37:39 所属栏目:Java 来源:网络整理
导读:我想在不使用setter的情况下向Object变量插入值.怎么可能. 这是一个例子 Class X{String variableName;// getters and setters} 现在我有一个函数,它包含变量名,要设置的值和Class X的Object. 我试图使用泛型方法将值设置为Object(objectOfClass),并在相应的
我想在不使用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;
    }

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读