Java方法用Reflection给对象字段赋值

标签 java reflection

我想知道是否可以在 Java 中实现类似以下内容:

public class MyClass {
    private String name;
    private Integer age;
    private Date dateOfBirth;
    // constructors, getters, setters

    public void setField(String aFieldName, Object aValue) {
        Field aField = getClass().getDeclaredField(aFieldName);
        // use: aField.set(...) with proper type handling
    }
 }

我真的被 setField 方法困住了,任何想法都会非常有帮助。

谢谢!

编辑:这样做的原因是我想在另一个类中有一个方法,如下所示

public static MyClass setAll(List<String> fieldNames, List<Object> fieldValues) {
    MyClass anObject = new MyClass();
    // iterate fieldNames and fieldValues and set for each fieldName 
    // the corresponding field value
    return anObject;
}

最佳答案

当然:

aField.set(this, aValue);

首先进行类型检查:

if (!aField.getType().isInstance(aValue))
    throw new IllegalArgumentException();

但是由于使用错误类型的值调用 set 无论如何都会生成 IllegalArgumentException,因此这种检查不是很有用。

关于Java方法用Reflection给对象字段赋值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7510467/

相关文章:

java - Google map 查询返回的 JSON 包含像\x26 这样的编码字符(如何解码?)

java - 将一个变量用作数据类型不同但名称相同的另一个变量

c# - CoreCLR 中的 Type.GetCustomAttributes 方法在哪里?

java - 对具有原始数字返回类型的方法的反射(reflection)

c# - 访问自定义属性中的声明类?

C# 反射 Property.GetValue() 问题

java - 管道上的拆分未按预期运行

java - 单击时微调器选定的项目不显示

java - 无法将 Spring Boot 应用程序启动到 Linux 服务器

java - OpenCsv 用 BeanToCsv + HeaderColumnNameTranslateMappingStrategy 写错列名