Ésta es la segunda vez que me encontré escribiendo este tipo de código, y decidí que debe haber una manera más fácil de leer para lograr esto:Dejar que el código de probar cosas diferentes hasta que tenga éxito, perfectamente
Mi código intenta descubrir algo, eso no está exactamente bien definido, o hay muchas maneras de lograrlo. Quiero que mi código pruebe varias formas de resolverlo, hasta que tenga éxito, o se quede sin estrategias. Pero no he encontrado una manera de hacer esto limpio y legible.
Mi caso particular: Necesito encontrar un tipo particular de método desde una interfaz. Puede anotarse para explicitud, pero también puede ser el único método adecuado (según sus argumentos).
Por lo tanto, mi código lee actualmente, así:
Method candidateMethod = getMethodByAnnotation(clazz);
if (candidateMethod == null) {
candidateMethod = getMethodByBeingOnlyMethod(clazz);
}
if (candidateMethod == null) {
candidateMethod = getMethodByBeingOnlySuitableMethod(clazz);
}
if (candidateMethod == null) {
throw new NoSuitableMethodFoundException(clazz);
}
Hay debe haber una mejor manera ...
Editar: Los métodos de devolución de un método si lo encuentra, null
lo contrario. Podría cambiar eso para intentar/capturar la lógica, pero eso apenas lo hace más legible.
Edit2: Por desgracia, sólo puede aceptar una respuesta :(
es probable que desee un lenguaje dinámico, p. Python, Ruby; donde estos modismos se vuelven más naturales y fáciles de usar debido a tener funciones y clases como objetos de primera clase (por lo tanto, puede poner esas funciones en una lista y utiliza un ciclo para llamar a las funciones una a una). –