我想知道是否有可能在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;
}
答案 0 :(得分:7)
不确定
aField.set(this, aValue);
首先进行类型检查:
if (!aField.getType().isInstance(aValue))
throw new IllegalArgumentException();
但是,因为使用错误类型的值调用set
无论如何都会生成IllegalArgumentException
,这种检查不是很有用。
答案 1 :(得分:4)
虽然我不知道为什么你会这样做(因为你已经有吸气剂和制定者),试试这个:
Field aField = getClass().getDeclaredField(aFieldName);
aField.set(this, aValue);
有关详细信息,请see this。
答案 2 :(得分:3)
我想建议使用map
代替List<T>
。
for(Map.Entry<String,Object> entry:map.entrySet())
{
Field aField = anObject.getClass().getDeclaredField(entry.getKey());
if(entry.getValue().getClass().equals(aField.getType()))
aField.set(anObject,entry.getValue());
}
return anObject;