https://kotlinlang.org/docs/reference/mpp-connect-to-apis.html Это в общем случае про мультиплатформенные возможности котлина.
Ааа.. я ещё не выбрался за JVM
В двух словах — есть несколько диалектов котлина (Kotlin/JVM, Kotlin/JS, Kotlin/Native), различающихся в небольших деталях, и есть отдельный т.н. common диалект, коду на котором нельзя обращаться ни к чему, кроме другого common-кода (щас там сложнее всё, но не принципиально для понимания). При сборке кода под, к примеру, JVM можно взять модули на Kotlin/JVM и на common, они все вместе будут собираться. Вот механизм expect/actual позволяет те вещи, которые не реализуемы в common (к примеру, вывод в консоль везде разный) задекларировать как expect, в платформенном коде написать совместимые actual-декларации, и оно соединится вместе при сборке.
Ну и интересное место в данном контексте, в том что можно подсунуть готовый тип actual typealias AtomicRef<V> = java.util.concurrent.atomic.AtomicReference<V>
Благодарю за TLDR!
Тайпклассы на минималках (ха-ха)
Ну да, при этом у типа, который тайпалиасом в actual задекларирован, могут быть и другие свойства/методы. С сильной натяжкой, наверное, это можно назвать row polymorphism, но возможность применения этой штуки всё же ограничена.
в общем, я читал недавно всякие иссью и там вроде елизаров писал "We are almost ready to add extension block, but first we need to /*сосредоточиться на более приземленных вещах*/ and implement multireceivers" во факту этот extension блок позволит делать тайпклассы, isn't it ?
interface Summable<T> { operator fun T.sum(other: T): T } extension Int : Summable<Int>
Вот поддерживаю всеми руками
Обсуждают сегодня