Re: Variable in Setter
teser3@hotmail.com wrote:
I have this:
BeanChalker.setLastname(lastname);
Is it possible to use variables like this because I am not sure how to
set up the variable or use concatenator some way to make it work:
String myvariableOne = "Lastname";
String myvariableTwo = "lastname";
BeanChalker.set + myvariableOne + (myvariableTwo);
If I understand you correctly, what you want is a runtime method
dispatch. The short answer to your question is "no it is not possible."
The medium answer is "well, yes it is, but it is generally not a good
idea to try and use."
The easiest way to do what you want to do is to manually set functions
up yourself:
class Foo {
private String varA, varB, varC;
// constructors, etc.
public void setA(String newA) {varA = newA;}
public void setB(String newB) {varB = newB;}
public void setC(String newC) {varC = newC;}
public void set(String variable, String value) {
if ("A".equals(variable))
setA(value);
else if ("B".equals(variable))
setB(value);
else if ("C".equals(variable))
setC(value);
else
throw new IllegalArgumentException("Variable "+variable+
" not found!");
}
}
If you really want the long answer, you probably don't. Use the previous
solution if at all feasible or not at all.
Still want it? Here's the reflection method:
class Foo { /* Defined similar to above sample, except w/o set */ }
class Test {
public void foobar() {
String variable = "Lastname";
String value = "Stroustrup"; // Kudos if you get the reference!
Foo bar = new Foo(); // assume it works
Class<?> fooClass = Foo.class;
try {
Method m = fooClass.getMethod("set"+variable);
m.invoke(bar,value);
} catch (Exception e) { // See the APIs for all exceptions
// Don't do this in real code.
}
}
}
I don't recommend that approach.
--
Beware of bugs in the above code; I have only proved it correct, not
tried it. -- Donald E. Knuth