streams - lambda stream java
¿Cómo determinar correctamente que un objeto es un lambda? (2)
Veo que la clase de un lambda es isSynthetic() && !isLocalOrAnonymousClass()
, pero supongo que lo mismo puede ser cierto para las clases de proxy.
Por supuesto, podría verificar getDeclaredMethods().length == 1
y aplicar regexp
al nombre de la clase.
Sin embargo, quiero saber si existe una opción más elegante y robusta para averiguar si un objeto dado es una lambda.
No hay forma oficial de hacerlo, por diseño. Lambdas son parte del lenguaje; y están integrados en el sistema de tipos a través de interfaces funcionales. No debería haber necesidad de distinguir un Runnable
que comenzó su vida como una lambda, una clase con nombre o una clase interna: todos son Runnables. Si crees que tienes que "tratar con lambda" desmantelando el archivo de la clase, ¡casi seguro que estás haciendo algo mal!
public static boolean isLambda(Object obj) {
return obj.getClass().toString().contains("$$Lambda$");
}