1) 我们的目标是找出Clojure函数与Java结构存在语义匹配的地方,并使它们在那里的使用是隐式的。标记为这样的函数接口必须只有一个方法,并且明确表示该意图。SAM接口虽然在结构上相似,但并没有那个明确的意图,可能并不与Clojure函数的语义匹配(而是“过程”或某种非函数概念)。
尽管如此,SAM和方法值的组合是一个有趣的交汇点,我们仍在努力完善。如果你将方法值传递给接受SAM的方法,这是一个我们可以直接适配(如Java使用方法引用)的点,而无需创建方法值包装器并对其进行适配。这是一个没有Clojure函数和不需要语义匹配的地方,我们可能支持,仍待定。
2) maybeFIMethod检查类是否有@FunctionalInterface注解,它只能存在于接口上,因此检查它是否是接口是多余的。