I was wondering whether it would be possible to have something like the following in 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
}
}
I am really stuck in the setField method and any idea would be very helpful.
Thanks!
EDIT: The reason for this is that I would like to have a method in another class like the following
public static MyClass setAll(List<String> fieldNames, List<Object> fieldValues) {
MyClass anObject = new MyClass();
// iterate fieldNames and fieldValues and set for e开发者_JAVA技巧ach fieldName
// the corresponding field value
return anObject;
}
Sure:
aField.set(this, aValue);
To do type checking first:
if (!aField.getType().isInstance(aValue))
throw new IllegalArgumentException();
but since calling set
with a value of the wrong type will generate an IllegalArgumentException
anyway, that sort of check isn't very useful.
Though I'm at a loss as to why you would want to do it like that (since you already have getters and setters), try this:
Field aField = getClass().getDeclaredField(aFieldName);
aField.set(this, aValue);
For more info, see this.
I'd like to suggest a map
instead of 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;
精彩评论