How to correctly determine that an object is a lam

2019-01-23 00:51发布

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.

2条回答
Lonely孤独者°
2楼-- · 2019-01-23 01:15
public static boolean isLambda(Object obj) {
    return obj.getClass().toString().contains("$$Lambda$");
}
查看更多
放荡不羁爱自由
3楼-- · 2019-01-23 01:24

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!

查看更多
登录 后发表回答