如何正确确定一个对象是一个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$"); }