I have an object that has a lot of attributes, each one with it’s getter and setter. Each attribute has a non primitive type, that I don’t know at runtime.
For example, what I have is this:
public class a{
private typeA attr1;
private typeB attr2;
public typeA getAttr1(){ return attr1; }
public typeB getAttr2(){ return attr2; }
public void setAttr1(typeA at){ attr1 = at; }
public void setAttr2(typeB at){ attr2 = at; }
}
public class typeA{
public typeA(){
// doesn't matter
}
}
public class typeB{
public typeB(){
// doesn't matter
}
}
So, using reflection, I obtained the setter method for an attribute. Setting a value in the standard way is something like this:
a test = new a();
a.setAttr1(new typeA());
But how can I do this using reflection? I already got the setAttr1() method using reflection, but I don’t know how to create a new typeA object to be inserted in the setter.
Use
Class#newInstance().Or, in your specific case when you have to determine the type of the method parameter:
You can learn more about reflection in Sun tutorial on the subject. That said, classnames ought to start with uppercase. I’ve corrected it in the above example.
By the way, instead of reinventing the Javabean reflection wheel, you may find one of the tools mentioned here useful as well.