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>
),因为赋值语句可以推断返回的是哪种类型的值。
希望对您有所帮助。
我有:
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>
),因为赋值语句可以推断返回的是哪种类型的值。
希望对您有所帮助。