Почему Int является подтипом Comparable <Int>в Kotlin, а HashMap не является подтипом Comparable <HashMap> - PullRequest
0 голосов
/ 16 апреля 2020

Я читаю через Kotlin До c и нашел это утверждение, которое мне не понятно. Может ли кто-нибудь объяснить это?

Учитывая

fun <T : Comparable<T>> sort(list: List<T>) {  ... }

тогда

sort(listOf(1, 2, 3)) // OK. Int is a subtype of Comparable<Int>
sort(listOf(HashMap<Int, String>())) // Error: HashMap<Int, String> is not a subtype of Comparable<HashMap<Int, String>>

1 Ответ

0 голосов
/ 16 апреля 2020

Это потому, что kotlin.Int реализует kotlin.Comparable<Int>, поэтому верхняя граница типа T в функции sort удовлетворена, поскольку список T является списком Int.

Вместо этого HashMap<K, V> не реализует Comparable<HashMap<K, V>>, поэтому верхняя граница типа T в функции sort не выполняется, поскольку список T является списком HashMap<Int, String>.

Чтобы сделать его Comparable, вы можете создать свой собственный HashMap, который также Comparable:

class ComparableHashMap<K, V>: HashMap<K, V>(), Comparable<HashMap<K, V>> {
    override fun compareTo(other: HashMap<K, V>): Int {
        // Implement comparison.
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...