番石榴TreeMultimap的Kotlin类型推断失败

我有:

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类是什么?我该如何解决?

您需要通过两个比较器实现来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> ),因为赋值语句可以推断返回哪种类型的值。

希望这可以帮助。