Il codice seguente è un piccolo esempio che riproduce facilmente il problema. Quindi ho variabile di tipo String, su cui è impostato un valore predefinito. Ho 3 metodi:Introspezione Java - comportamento strano
- getter
- setter
- metodo comodo che converte la stringa booleano
L'introspezione non restituisce il getter come ReadMethod e il setter come il writeMethod. Invece restituisce il metodo isTest() come readMethod. Il setter è vuoto.
Dalla documentazione capisco che se il tipo sarebbe un booleano, il metodo "è" ha precedenza più alta su get, ma il tipo è String, quindi non ha senso cercare anche un "is-xxx " metodo?
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");
}
}
C'è qualcuno che ha qualche intuizione su questo?
Ulteriori informazioni:
- L'ordine non cambia il risultato. Il metodo isTest() è sempre visto come readMethod
- Nel caso in cui semplicemente rinomini isTest() a bsTest(), seleziona getter e setter come readMethod e writeMethod. Quindi ha qualcosa a che fare con "is-xxx".
Cosa succede se dichiari il metodo 'isTest' alla fine della classe? Potrebbe essere che sia riconosciuto come booleano perché è la prima occorrenza e quindi il setter non corrisponde al tipo String. –
No, non ha senso, ma a quanto pare è quello che hanno deciso (o è un bug). Non puoi fare molto su questo, tranne fermarti per rappresentare i booleani con le stringhe: D – Dici
Ho aggiunto qualche informazione in più nel testo iniziale. L'ordine non ha effetto sul risultato. – Quirexx