Общие ошибки при использовании сборщика toImmutableSortedMap от Guava из Kotlin - PullRequest
2 голосов
/ 30 сентября 2019

Я пытаюсь использовать сборщик Guava's toImmutableSortedMap из Kotlin 1.3.50 (на Java 13 на macOS 10.14.6 + обновления). Я получаю ошибки обобщения, когда я пытаюсь использовать toImmutableSortedMap, но я не получаю никаких ошибок, если вместо этого использую toImmutableMap:

val map = mutableMapOf<String, MutableMap<Path, String>>()

// populate map

// toImmutableSortedMap has compile-time generics errors
map.entries.stream()
.collect(
    toImmutableSortedMap<Map.Entry<String, MutableMap<Path, String>>, String, ImmutableSortedMap<Path, String>>(
        naturalOrder<String>(),
        {it.key},                             // errors e1 & e2 here
        {ImmutableSortedMap.copyOf(it.value)} // errors e3 & e4 here
    )
)

// toImmutableMap works fine
map.entries.stream()
.collect(
    toImmutableMap<Map.Entry<String, MutableMap<Path, String>>, String, ImmutableSortedMap<Path, String>>(
        {it.key},
        {ImmutableSortedMap.copyOf(it.value)}
    )
)

Ошибки обобщения для toImmutableSortedMap:

e1: Type mismatch: inferred type is () -> [ERROR : <ERROR PROPERTY TYPE>] but Function<in Map.Entry<String, MutableMap<Path, String>>!, out String!>! was expected
e2: Unresolved reference: it
e3: Type mismatch: inferred type is () -> ??? but Function<in Map.Entry<String, MutableMap<Path, String>>!, out ImmutableSortedMap<Path, String>!>! was expected
e4: Unresolved reference: it

Есть идеи как это исправить?

1 Ответ

3 голосов
/ 30 сентября 2019

Вы можете добавить некоторые типы явным образом, и это будет работать:

map.entries.stream()
    .collect(
        toImmutableSortedMap<Map.Entry<String, MutableMap<Path, String>>, String, ImmutableSortedMap<Path, String>>(
            naturalOrder<String>(),
            Function { it.key },                             
            Function { ImmutableSortedMap.copyOf(it.value) } 
        )
    )

Для меня это выглядит как некоторые проблемы с преобразованием SAM в Kotlin

...