如何正确确定一个对象是一个lambda?
我看到lambda的类是isSynthetic() && !isLocalOrAnonymousClass()
,但我认为对于代理类也是如此。
当然,我可以检查getDeclaredMethods().length == 1
并将regexp
应用于类名。
不过,我想知道是否有一个更优雅和健壮的选项,以找出一个给定的对象是否是lambda。
没有官方的方式来devise。 兰姆达斯是语言的一部分; 并通过function接口集成到types系统中。 应该没有必要区分开始生命为lambda,命名类或内部类的Runnable – 它们都是Runnables。 如果你认为你必须通过拆分类文件来“处理lambda”,那么你几乎肯定会做错事情!
public static boolean isLambda(Object obj) { return obj.getClass().toString().contains("$$Lambda$"); }