Google Guava 30.1 定义了这两个 `addAll` 重载用于 `TreeRangeSet`
public void TreeRangeSet.addAll(RangeSet)
public default void RangeSet.addAll(Iterable<Range>)
以下代码编译时没有任何错误或警告
(import [com.google.common.collect Range RangeSet TreeRangeSet])
(defn example []
(let [container (TreeRangeSet/create)
temp (TreeRangeSet/create ^Iterable (list (Range/closed 1 2)))]
(.addAll container ^RangeSet temp)))
然而,调用示例时出现运行时错误,表示 `TreeRangeSet` 没有实现 `Iterable` 接口。正如我所理解,这个错误是因为 Clojure 编译器生成了对第二个重载的调用(尽管有类型提示)。经过一番实验,我认为这是由于第一个重载的 `isBridge` 返回 true,而 `Reflector.getMethods` 不会返回它,因为第二个重载不是一个桥接方法。
因此有两个问题:有没有方法可以生成对第一个重载的调用,如果没有,那应该有吗?
(顺便说一下,我在初始化 `temp` 的时候想使用
(let [temp (TreeRangeSet/create ^Iterable [(Range/closed 1 2)])
但是这生成了一个反射警告。我认为这是一个 CLJ-1929 的例子。)