How to correctly determine that an object is a lambda?

java, java-8, lambda

Solution

There is no official way to do this, by design. Lambdas are part of the language; and are integrated into the type system through functional interfaces. There should be no need to distinguish a `Runnable` that began life as a lambda, a named class, or an inner class -- they're all Runnables. If you think you have to "deal with lambda" by taking apart the class file, you're almost certainly doing something wrong!

Problem

I see that the class of a lambda is `isSynthetic() && !isLocalOrAnonymousClass()`, but I presume that the same may be true for proxy classes. Of course, I could check that `getDeclaredMethods().length == 1` and apply `regexp` to the class name. However I want to know if there is a more elegant and robust option to find out if a given object is a lambda.

Original source