1) 我们的目的是找出Clojure函数与Java构造之间有语义匹配的地方,并使它们在那里使用是隐式的。标记为这样的功能接口必须只有一个方法,并明确声明该意图。虽然SAM接口在结构上类似,但没有那种声明的意图,可能与Clojure函数的语义不匹配(而是“过程”或某种非功能性概念)。
话虽如此,SAM和方法值的组合是一个有趣的汇聚点,我们仍在努力研究。如果你将方法值传递给接受SAM的方法,那么我们可以在不创建方法值包装器并对其进行适配的情况下直接适配(正如Java使用方法引用那样)。这是一个没有Clojure函数也没有必要进行语义匹配的情况,我们可能还会支持这一点,尚待确定。
2) maybeFIMethod检查类是否有@FunctionalInterface注解,这个注解只能存在于接口上,因此没有必要检查它是否是一个接口。