使用Reflection分配对象字段值的Java方法

gpo*_*pol 8 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
    }
 }
Run Code Online (Sandbox Code Playgroud)

我真的陷入了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;
}
Run Code Online (Sandbox Code Playgroud)

Chr*_*ung 7

当然:

aField.set(this, aValue);
Run Code Online (Sandbox Code Playgroud)

首先进行类型检查:

if (!aField.getType().isInstance(aValue))
    throw new IllegalArgumentException();
Run Code Online (Sandbox Code Playgroud)

但是,因为set使用错误类型的值调用将会生成一个IllegalArgumentException,这种检查不是很有用.