Esiste un modo per utilizzare metodi magici in Java come in PHP con __call
?Chiamare magicamente metodi in Java
Per esempio:
class foo {
@Setter @Getter
int id;
@Getter
Map <String, ClassInFoo> myMap;
protected class ClassInFoo {
@Setter @Getter
String name;
}
@Setter
String defaultKey;
}
che sto usando Project Lombok annotazioni per i metodi getter e setter per semplificare il codice.
Consideriamo che la mia mappa contiene diversi elementi mappati da String e defaultKey definisce quello predefinito.
Quello che vorrei è poter chiamare foo.getName()
che restituirebbe il nome predefinito come foo.myMap.get(defaultKey).getName()
.
La ragione per cui non posso semplicemente scrivere tutti i getter manualmente è che la classe Foo è in realtà ereditata con generici e la classe interna potrebbe essere diversa.
ho sorta di bisogno di qualcosa come:
function Object __call(method) {
if (exist_method(this.method)
return this.method();
else
return this.myMap.get(defaultKey).method();
}
È questo in qualche modo possibile in Java?
EDIT:
Ho fatto un esempio più precisa di quello che sto cercando di realizzare qui: https://gist.github.com/1864457
L'unica ragione per farlo è quello di "stenografia" i metodi nella classe interna.
Fare l'upvoting come una domanda interessante, ma questo non dovrebbe essere etichettato OOP. La funzione che ti interessa non è orientata agli oggetti e infatti non è nemmeno necessariamente dinamica. – Perception
Generalmente vuoi i tuoi getter e setter che puoi generare con il tuo IDE. Ad esempio, non è una buona idea avere un getter per restituire una collezione mutevole. invece puoi avere 'ClassInFoo getMyMap (Nome stringa)' –
Sì, posso scrivere tutti i getter, ma l'ho trovato duplicato e brutto. Mi piacerebbe così che i miei ragazzi di codice HTML possano richiedere semplicemente questi metodi. –