当前位置: 首页 > 面试题库 >

如何在不使用设置器的情况下为类变量设置值

赖鸿羲
2023-03-14
问题内容

我想在Object不使用设置器的情况下将值插入变量。如果有可能怎么办。

这是一个例子

Class X{
String variableName;
// getters and setters
}

现在我有一个包含variable namevalue to be set和的函数Object of the Class X

我试图使用一种通用方法将值设置为Object(objectOfClass),而值我已经valueToBeSet在相应的variable(variableName)中通过了()。

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 valueToBeSet, 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;
    }


 类似资料:
  • 我正在开发一个iOS应用程序,在应用程序的设置内,我将允许用户有亮或暗模式。这款应用在默认情况下会是浅色模式,但如果用户将其改成暗色模式,它就会改变标签/背景/按钮等。 我计划通过将亮或暗模式存储在共享默认值中来实现这一点,当页面加载时,我将检查这一点。 如果是dark模式,我知道我可以在ViewDidLoad()中根据需要更改颜色,但这似乎是太多的工作。我这里有我需要的一套颜色: 我知道我可以把

  • 我使用下面的代码(来自这个答案)来配置要记录在WebClient请求上的头: 这很管用,但感觉有点奇怪。问题是:我是否需要像这样包含Jackson/objectMapper配置,或者是否有更简单的方法来避免Spring objectMapper配置被覆盖?

  • 我花了过去几个小时试图设置2默认图像的nodejs 14和rethinkdb 2.3.5,所以很抱歉,如果语气有点沮丧,但我目前感到沮丧。 我的要求似乎超级简单。 下载nodejs 14和RejectDB 2.3.5的默认图像。 将我当前目录中的所有内容复制到nodejs 14映像中 我希望nodejs图像依赖于DB图像 在nodejs 14图像中运行2个命令<代码>npm ci和 请参阅测试中的

  • 我正在windows(7.3版)上安装gvim。启动后,我希望设置变量MYVIMRC,但它没有设置。有没有理由不设定。 有一个vimrc文件,因为许多设置与默认设置不同。 我用检查了MYVIMRC的值 gvim可执行文件位于c:\workarea\Vim\vim73中,c:\workare\Vim中的*\u vimrc*(在gvim启动时读取)。启动gvim后,我可以使用 对于版本:我发现系统vi

  • 问题内容: 谁能向我解释为什么Hibernate 默认情况下不设置注释,而是允许实体根据当前设置的属性生成INSERT? 什么是不使用的原因,因此默认情况下包括所有实体属性? 问题答案: @ jb-nizet说了什么。 另外,在我的书中是个坏主意。 从生成的SQL跳过空字段,很快您将发现自己处于声明列的情况,这实际上导致持久数据与休眠知道的实体数据不同。这会造成挫败感,并可能使您诉诸昂贵的电话。

  • 我将一个字符串设置为activeElement.value,一切正常。现在,我想为activeElement.value设置一个变量,我得到了以下错误代码: 线程“main”中的异常 org.openqa.selenium.WebDriver异常:未定义患者 ID 命令持续时间或超时:66 毫秒 构建信息:版本:“2.45.0”,修订版:“5017cb8”,时间:“2015-02-26 23:59