Java method to assign object field values with Reflection

后端 未结 3 1564
不知归路
不知归路 2021-01-05 02:37

I was wondering whether it would be possible to have something like the following in Java:

public class MyClass {
    private String name;
    private Intege         


        
相关标签:
3条回答
  • 2021-01-05 03:09

    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;
    
    0 讨论(0)
  • 2021-01-05 03:10

    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.

    0 讨论(0)
  • 2021-01-05 03:19

    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.

    0 讨论(0)
提交回复
热议问题