Esto puede ser una pregunta bastante subjetiva, pero tal vez no. Mi aplicación contiene un montón de formularios que se muestran al usuario en diferentes momentos. Cada forma es una clase propia. Normalmente, el usuario hace clic en un botón, que inicia un nuevo formulario.Adecuación de la reflexión de Java
que tienen una función de conveniencia que construye estos botones, se llaman así:
buildButton("button text", new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
showForm(new TasksForm(args...));
}
});
hago esto docenas de veces, y es muy engorroso tener que hacer un SelectionAdapter cada vez.
Realmente todo lo que necesito para el botón saber es qué clase instanciar cuando se hace clic en él y qué argumentos para dar el constructor, por lo que construyó una función que llamo esta forma:
buildButton("button text", TasksForm.class, args...);
Donde args es una lista arbitraria de objetos que podría usar para crear instancias de TasksForm normalmente.
Utiliza la reflexión para obtener un constructor de la clase, coincide con la lista de argumentos y crea una instancia cuando es necesario. La mayoría de las veces no tengo que pasar ningún argumento al constructor en absoluto. El inconveniente es, obviamente, que si paso un conjunto de argumentos incorrecto, no puede detectarlo en el momento de la compilación, por lo que si falla, se muestra un diálogo en tiempo de ejecución. Pero normalmente no fallará, y será fácil de depurar si lo hace.
Creo que esto es mucho más limpio porque vengo de idiomas donde el uso de literales de función y clase es bastante común. Pero si usted es un programador Java normal, ¿le daría miedo verlo o le agradecería no tener que escanear un trillón de SelectionAdapters?
I'd go with reflection. –