Der folgende Code ist ein kleines Beispiel, das das Problem leicht reproduziert. Ich habe also eine Variable vom Typ String, für die ein Standardwert festgelegt ist. Ich habe 3 Methoden:Java Introspection - seltsames Verhalten
- Getter
- setter
- bequeme Methode, die die Zeichenfolge
Die Selbstbeobachtung gibt nicht die Getter als Read boolean umwandelt und den Setter als Write. Stattdessen wird die isTest() -Methode als readMethod zurückgegeben. Der Setter ist leer.
Aus der Dokumentation verstehe ich, dass, wenn der Typ wäre ein boolescher, die "ist" -Methode hat Vorrang vor get, aber der Typ ist String, so ist es nicht sinnvoll, sogar nach einem "is-xxx " Methode?
public class Test {
public class Arguments {
private String test = Boolean.toString(true);
public boolean isTest() {
return Boolean.parseBoolean(test);
}
public String getTest() {
return test;
}
public void setTest(String test) {
this.test = test;
}
}
/**
* @param args the command line arguments
*/
public static void main(String[] args) throws IntrospectionException {
BeanInfo info = Introspector.getBeanInfo(Arguments.class);
System.out.println("Getter: " + info.getPropertyDescriptors()[1].getReadMethod());
System.out.println("Setter: " + info.getPropertyDescriptors()[1].getWriteMethod());
PropertyDescriptor descr = new PropertyDescriptor("test", Arguments.class);
System.out.println("T");
}
}
Gibt es jemanden, der einen Einblick hat?
Zusätzliche Informationen:
- Die Reihenfolge das Ergebnis nicht ändert. Die isTest() -Methode wird immer als readMethod betrachtet.
- Wenn ich die isTest() einfach in bsTest() umbenenne, werden Getter und Setter als readMethod und writeMethod ausgewählt. Es hat also etwas mit "is-xxx" zu tun.
Was passiert, wenn Sie am Ende der Klasse die Methode 'isTest' deklarieren? Es kann sein, dass es als boolescher Wert erkannt wird, da dies das erste Vorkommen ist und daher der Setter nicht mit dem Typ String übereinstimmt. –
Nein, es macht keinen Sinn, aber anscheinend haben sie sich entschieden (oder es ist ein Fehler). Sie können nicht viel dagegen tun, außer zu stoppen, um Booleans mit Strings darzustellen: D – Dici
Ich habe einige weitere Informationen im ursprünglichen Text hinzugefügt. Die Reihenfolge hat keinen Einfluss auf das Ergebnis. – Quirexx