如何正确确定一个对象是lambda?


问题内容

我看到lambda的类是isSynthetic() && !isLocalOrAnonymousClass(),但是我认为对于代理类而言可能同样如此。

当然,我可以检查一下getDeclaredMethods().length == 1并应用于regexp类名。

但是我想知道是否有一个更优雅,更强大的选项来确定给定的对象是否为lambda。


问题答案:

设计上没有官方的方法可以做到这一点。Lambda是语言的一部分;并通过功能接口集成到类型系统中。无需区分以Runnablelambda,命名类或内部类开头的生命,它们都是Runnable。如果您认为必须拆开类文件来“处理lambda”,则几乎可以肯定是做错了什么!