对于番石榴TreeMultimap,Kotlin类型推断失败

时间:2017-05-22 04:18:12

标签: guava kotlin

我有:

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

调用create()是一个错误:

MapCrawler.kt:(63,71):类型推断失败。预期的类型不匹配:推断类型是TreeMultimap&lt;(??? .. ???),(??? .. ???)&gt;!但预计会有SortedSetMultimap

如果我将其更改为

SortedSetMultimap<String, String> 

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

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

什么是关于类型推断的Edge类,以及如何修复它?

1 个答案:

答案 0 :(得分:2)

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

希望这有帮助。