функцию foo приходил список значений такого типа, по которому ты можешь посортировать и вот так будут выглядеть два подхода:
// вот это подход с сабтайпингом
fun <A: Comparable<A> foo(list: List<A>): A = ???
// а вот так это было бы сделано через type class
// Comparator - какой никакой, а с натяжкой тайп класс
fun <A> foo(list: List<A>, comparator: Comparator<A>): A = ???
В чем преимущество тайп классов перед сабтайпингом - ты можешь сделать интсанс даже для класса, который нельзя расширить.
В более функиональных языках есть имплиситные параметры и например в той же scala компилятор мог бы за тебя подставить Comparator, ну а в котлине приходится ручками
Comparator выглядит как обычный интерфейс.
Пора в закладки, чтобы каждый раз не искать
Обсуждают сегодня