¿Hay alguna forma de usar métodos mágicos en Java como los hay en PHP con __call
?Mágicamente, llame a los métodos en Java
Por ejemplo:
class foo {
@Setter @Getter
int id;
@Getter
Map <String, ClassInFoo> myMap;
protected class ClassInFoo {
@Setter @Getter
String name;
}
@Setter
String defaultKey;
}
estoy usando Project Lombok anotaciones para los métodos get y set para simplificar el código.
Consideremos que mi mapa contiene varios elementos mapeados por String y el defaultKey define el predeterminado.
Lo que me gustaría es poder llamar al foo.getName()
que devolvería el nombre predeterminado como foo.myMap.get(defaultKey).getName()
.
La razón por la que no puedo simplemente escribir todos los captadores manualmente es que la clase Foo es de hecho heredada con genéricos y la clase interna puede ser diferente.
en cierto modo me necesito algo como:
function Object __call(method) {
if (exist_method(this.method)
return this.method();
else
return this.myMap.get(defaultKey).method();
}
¿Es esto de alguna manera posible en Java?
EDIT:
Hice un ejemplo más preciso de lo que estoy tratando de lograr aquí: https://gist.github.com/1864457
La única razón de hacer esto es a "taquigrafía" los métodos de la clase interna.
Upvoting como una pregunta interesante, pero esto no debe etiquetarse como OOP. La característica que le interesa no está orientada a objetos y, de hecho, ni siquiera es necesariamente dinámica. – Perception
Generalmente, usted quiere su propio getter y setters que puede generar con su IDE. Por ejemplo, no es una buena idea hacer que un getter devuelva una colección mutable. en su lugar, puede tener 'ClassInFoo getMyMap (String name)' –
Sí, bueno, puedo escribir todos los captadores, pero lo encontré duplicado y feo. Simplemente me gustaría esto para que mis chicos de codificación HTML puedan solicitar estos métodos simplemente. –