Articles of типы

Как создать переменную, которая может принимать строки и функции в Котлин?

Есть ли способ создать переменную для хранения строк и функций? Подобно var x:dynamic где x может быть любым типом или функцией: x="foo"; x= {print (…)} x="foo"; x= {print (…)} dynamic – это не тип (он просто отключает проверку типов) и работает только в kotlin.js (JavaScript). Есть ли тип, который включает в себя типы функций и […]

Доступ к типам параметров внешнего типа

В Котлине мы можем определить вложенные интерфейсы. Если внешний интерфейс является общим (здесь просто для моделирования правильного мета-типа, но можно представить себе другое использование), могу ли я ссылаться на его параметр типа из внутреннего типа? То есть, я хочу достичь (эквивалент) этого: interface JsonRepresentable<Self: JsonRepresentable<Self>> { fun toJson(): String interface Companion { operator fun invoke(json:String): […]

Котлин: Путаница с лямбдами и дженериками

См. Сообщения об ошибках в комментариях: interface Printable {} class Book(val title: String) :Printable fun bookPrint(b: Book?):String = "Title: " + b?.title class Author(val name: String) :Printable fun authorPrint(a: Author?):String = "Name: " + a?.name // Unsupported: [modifier on parameter in function type] // ————-vv fun printIt(f: (in Printable?) -> String, a:Printable):String { return "Unknown: […]

Сопутствующие объекты скрывают класс-ошибку или функцию?

В Котлине следующий код представляется разумным: data class Foo(val bar: String) { fun combine(other: Foo): Foo { return Foo(bar + other.bar) } companion object Foo { fun someHelper() {} } } Однако он не компилируется: type Foo привязывается к Foo.Foo вместо Foo ! Это ошибка (языковой дизайн или компилятор), или это функция? Если последний, что […]

проблема с параметром типа параметра

IntelliJ бросает на меня следующую ошибку, но, насколько я могу судить, проблем нет. Минимальный пример import org.springframework.jdbc.core.JdbcTemplate // … var jdbcTemplate: JdbcTemplate? = null // … relying on dependency injection from Spring if (jdbcTemplate == null) { throw RuntimeException("jdbcTemplate not injected correctly") } jdbcTemplate.execute("DROP TABLE customers IF EXISTS") Функция имеет три реализации. Один из них […]

Как использовать рекурсивный тип в Котлине

Я хочу сделать что-то вроде этого fun <F, A, R> recur(f: (F, A) -> R, arg: A): R = f(f, arg) where F = (F, A) -> R Как я могу ввести эту функцию в Котлин?

не удалось распечатать несколько булевых в Котлине

я начинаю с языка котлин fun main (args:Array<String>){ var flag1:Boolean= true //Explicit declaration var flag2: =false //Implicit declaration println(flag2 + "and " + flag1) println(flag1) println(flag2) } в вышеприведенном коде я объявил 2 типа логических явных и неявных деклараций для выше кода я бы сказал, ожидаю следующего вывода: – false and true true false но […]

Может ли Kotlin испускать аннотации JSR-305 в файлах классов

Я использую Kotlin с https://github.com/vojtechhabarta/typescript-generator для генерации определений TypeScript для моих классов, которые используются в API. Чтобы сохранить информацию о недействительности, машинописный генератор может использовать аннотации, присутствующие в полях и методах. Он поддерживает произвольные имена классов аннотаций, перечисленные в скрипте сборки. По какой-то причине Котлин комментирует поля с @org.jetbrains.annotations.Nullable значением с @org.jetbrains.annotations.Nullable а не аннотацию […]

Параметр типа reated Kotlin не может использоваться как параметр типа в теле функции

Параметр типа reified type в Kotlin предотвращает стирание параметра типа и позволяет определить тип параметра во время выполнения. Это позволяет компилировать и запускать следующий код, как ожидалось: inline fun <reified T> isA(value: Any) = value is T Однако, когда я пытаюсь использовать «T» в качестве параметра типа вместо автономного, я получаю сообщение о том, что […]

Можно ли возвращать тот же тип, что и параметр типа, когда оператор

Например: fun <T> f(a: T): T = when (a) { a is Int -> 0 // if T is Int, then return Int a is String -> "" // if T is String, then return String else -> throw RuntimeException() // Otherwise, throw an exception so that the return type does not matter. } Это […]

Intereting Posts