> I have this:
> BeanChalker.setLastname(lastname);
[quoted text clipped - 5 lines]
> 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.

Signature
Beware of bugs in the above code; I have only proved it correct, not
tried it. -- Donald E. Knuth
Mike Schilling - 11 Aug 2007 07:03 GMT
>> I have this:
>> BeanChalker.setLastname(lastname);
[quoted text clipped - 59 lines]
>
> I don't recommend that approach.
A very nice and thorough answer. I have one more suggestion. If what
you're really looking for is a way to choose a setter, and only a setter
(OK, maybe a getter too), at runtime, you're better off having a single set
method that accesses a map:
private Map values = new HashMap();
public void set(String key, String value)
{
values.set(key, value);
}
public String get(String key)
{
return values.get(key);
}
or, if you want to constrain the set of possible keys, add the following
static Set keys;
static
{
keys = new HashSet()
keys.add("firstName");
keys.add("lastName");
//etc.
}
private checkKey(String key)
{
if (!keys.contains(key))
throw new IllegalArgumentException(key);
}
and begin both get() and set() with calls to checkKey().
teser3@hotmail.com - 11 Aug 2007 14:31 GMT
On Aug 11, 2:03 am, "Mike Schilling" <mscottschill...@hotmail.com>
wrote:
> > tes...@hotmail.com wrote:
> >> I have this:
[quoted text clipped - 77 lines]
> return values.get(key);
> }
Thanks,
String myvariableTwo = "lastname";
Would I use this for my get info?
get(myvariableTwo);
> or, if you want to constrain the set of possible keys, add the following
>
[quoted text clipped - 16 lines]
>
> - Show quoted text -
String myvariableTwo = "lastname";
And this would be?
checkKey(myvariableTwo);
Mike Schilling - 11 Aug 2007 15:15 GMT
> On Aug 11, 2:03 am, "Mike Schilling" <mscottschill...@hotmail.com>
> wrote:
[quoted text clipped - 86 lines]
> Would I use this for my get info?
> get(myvariableTwo);
Exactly.
>> or, if you want to constrain the set of possible keys, add the
>> following
[quoted text clipped - 22 lines]
> And this would be?
> checkKey(myvariableTwo);
The client wouldn't call checkKey. The get and set methods would be changed
to:
public void set(String key, String value)
{
checkKey(key);
values.set(key, value);
}
public String get(String key)
{
checkKey(key);
return values.get(key);
}
teser3@hotmail.com - 12 Aug 2007 00:25 GMT
Thanks!
Is this correct?
Inside the BeanChalker class:
....
private String lastname;
private String firstname;
BeanChalker() {}
public String getLastname() {
return lastname;
}
public void setLastname(String lastname) {
this.lastname = lastname;
}
public String getFirstname() {
return firstname;
}
public void setFirstname(String firstname) {
this.firstname = firstname;
}
//or do I put this in the BeanChalker class instead?
public void set(String key, String value)
{
checkKey(key);
values.set(key, value);
}
public String get(String key)
{
checkKey(key);
return values.get(key);
}
.......
//then call like this in the Servlet?
static Set keys;
static
{
keys = new HashSet()
keys.add("firstName");
keys.add("lastName");
//etc.
}
private checkKey(String key)
{
if (!keys.contains(key))
throw new IllegalArgumentException(key);
}
String myvariableFirst = "firstname";
String myvariableLast = "lastname";
Would I use this for my get info?
BeanChalker.get(myvariableFirst);
BeanChalker.get(myvariableLast);