Olá:
Estava vendo algumas classes do pacote java.beans.*, mais especificamente as Classes Expression e Statement. Nesta Página do Java Almanac mostra como usar os métodos getters e setters através das classes acima citadas.
Assim, criei uma classe de teste. Nesta classe tento usar os métodos getters e setters de uma classe interna, de uma classe externa mas no mesmo arquivo java da classe de teste e uma classe externa de outro arquivo java.
Segue-se o código fonte da classe de teste:
import java.beans.Statement;
import java.beans.Expression;
public class TestaStatement{
private static final String STR_SET = "setValue";
private static final String STR_GET = "getValue";
private void executeSetter(Object obj, String strOrigin) throws Exception {
Statement stmt =
new Statement(obj, STR_SET, new Object[] {new Integer(1)});
stmt.execute();
System.out.println("executeSetter from " + strOrigin + " complete!");
}
private void executeGetter(Object obj, String strOrigin) throws Exception {
Expression expr = new Expression(obj, STR_GET, new Object[0]);
expr.execute();
System.out.println("executeSetter from " + strOrigin +
" complete! Value=" + expr.getValue());
}
public void testInnerClass() {
InnerClass inner = new InnerClass();
try {
this.executeSetter(inner, "testInnerClass()");
} catch(Exception e) {
e.printStackTrace();
}
try {
this.executeGetter(inner, "testInnerClass()");
} catch(Exception e) {
e.printStackTrace();
}
}
public void testOuterClass() {
OuterClass outer = new OuterClass();
try {
this.executeSetter(outer, "testOuterClass()");
} catch(Exception e) {
e.printStackTrace();
}
try {
this.executeGetter(outer, "testOuterClass()");
} catch(Exception e) {
e.printStackTrace();
}
}
public void testExternClass() {
ExternClass extern = new ExternClass();
try {
this.executeSetter(extern, "testExternClass()");
} catch(Exception e) {
e.printStackTrace();
}
try {
this.executeGetter(extern, "testExternClass()");
} catch(Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
TestaStatement test = new TestaStatement();
test.testInnerClass();
test.testOuterClass();
test.testExternClass();
}
private class InnerClass {
int value;
public int getValue() {
return this.value;
}
public void setValue(int value) {
this.value = value;
}
}
}
class OuterClass {
int value;
public int getValue() {
return this.value;
}
public void setValue(int value) {
this.value = value;
}
}
Agora o código da clase externa:
class ExternClass {
int value;
public int getValue() {
return this.value;
}
public void setValue(int value) {
this.value = value;
}
}
Pois bem, fui rodar o teste e olhem só o que obtive:
O que não entendi foi por que as classes são chamadas de “TestaStatement$InnerClass0”, “OuterClass0” e “ExternClass0”. Qual seria o motivo disso? Será que fiz alguma coisa de errado no meu código? O que vocês acham?
Grato,