guava TreeMultimap 的 Kotlin 类型推断失败

Kotlin type inference fails for guava TreeMultimap

我有:

data class Edge(val spec: String, val weight: Int)
private val graph: SortedSetMultimap<String, Edge> = TreeMultimap.create()

调用 create() 出错:

MapCrawler.kt: (63, 71): 类型推断失败。预期类型不匹配:推断类型为 TreeMultimap<(???..???), (???..???)>!但 SortedSetMultimap 是预期的

如果我把它改成

SortedSetMultimap<String, String> 

它工作正常(类型推断没有问题)。换句话说,这一行编译得很好:

private val graph: SortedSetMultimap<String, String> = TreeMultimap.create()

Edge class 是什么弄乱了类型推断,我该如何解决?

您需要将两个比较器实现传递给 create 函数。 看看下面的片段:

private val graph:SortedSetMultimap<String, Food> = TreeMultimap.create(Comparator<String> { str1, str2 -> 0
        // compare string here
    }, Comparator<Food> { edge1, edge2 -> 0
        // compare Edge object here
    })

我已经测试过它有效。您可以删除数据类型 (:SortedSetMultimap<String, Food>),因为赋值语句可以推断返回的是哪种类型的值。

希望对您有所帮助。