Articles of котлина

Функция расширения Kotlin

Учитывая это: MyView.setVisibility(View.VISIBLE) может быть упрощено: inline fun View.setVisible() = apply { visibility = View.VISIBLE } MyView.setVisible() Или это, если вы предпочитаете: inline infix fun View.vis(vis: Int) = apply { visibility = vis } MyView vis View.VISIBLE В любом случае, выполните следующие действия: MyView.VISIBLE

Типы подстановок Java против звездной проекции Котлина

Я читал kotlin документацию о различиях между Java и Koltin здесь https://kotlinlang.org/docs/reference/comparison-to-java.html . Там было указано, что у Колтина нет подстановочных типов . Однако, внимательно прочитав документацию о дженериках, я нашел информацию о звездной проекции и, честно говоря, я не вижу разницы. Может кто-нибудь объяснить мне, как это List<?> list; отличается от этого lateinit var […]

Глобальная функция расширения в котлине

Эй, я хочу сделать класс в kotlin, который будет содержать все функции расширения, которые я буду использовать в нескольких местах, например: class DateUtils { //in this case I use jodatime fun Long.toDateTime() : DateTime = DateTime(this) fun String.toDateTime() : DateTime = DateTime.parse(this) } class SomeClassWithNoConnectionToDateUtils { fun handleDataFromServer(startDate: String) { someOtherFunction() //startDate knows about toDateTime […]

перегрузка + и + = операторов для «классов номеров»

Я хочу создать функции расширения для классов, которые инкапсулируют простые Number s. Например, DoubleProperty . Я столкнулся с проблемой, что я не могу одновременно перегрузить оператор + и += . Я не хочу создавать поведение, которое проходит следующие тесты: class DoublePropertyTest { lateinit var doubleProperty: DoubleProperty @Before fun initialize() { doubleProperty = SimpleDoubleProperty(0.1) } @Test […]

Почему Netbeans жалуется на двусмысленность, в то время как Intellij вместо этого не

У меня есть kotlin math lib со следующим классом Vec2i и основным конструктором : data class Vec2i(override var x: Int, override var y: Int) : Vec2t<Int>() Тогда Vec2i также среди нескольких вторичных конструкторов, который должен перехватывать все другие типы номеров : constructor(x: Number, y: Number) : this(xi, yi) Все под Idea компилируется и запускается. Я […]

Использовать статический метод в Java как метод расширения в Котлине

У меня есть статический метод, объявленный в Java: class X { public static void foo(Y y) { … } } Я хотел бы использовать этот метод как метод расширения для экземпляров типа Y в Котлине: import X.foo … y.foo() Это возможно? У меня есть контроль над всем исходным кодом, например, для добавления аннотаций.

Условные побочные эффекты и дополнительные типы в Котлине

Я пытаюсь выполнить простой побочный эффект в Котлине: fun handle(request: Request) { repository.findByUID(request.userId)?.let { if (someCondition) return service.run(…) } } Как вы можете видеть, побочный эффект должен выполняться, когда репозиторий возвращает ненулевое значение и когда someCondition выполняется. Есть ли какой-нибудь метод Kotlin для этого, а не для использования if {} – return конструкций? В Java […]

Почему строка интерполяции Kotlin объединяет строки в Java?

Итак, в основном, я задавался вопросом, как интерпретация строки Котлина в Java (декомпилированный байт-код). Сначала я думал, что он будет использовать StringBuffer (или StringBuilder) или String.format (), но кажется, что он выполняет конкатенацию. Действительно ли это действительно так, и как насчет пула строк? Вот мой код Котлина: fun main(args: Array<String>) { val age : Int […]

Когда именно ключевое слово оператора требуется в Котлине?

В 14-м Kotlin Koan при перегрузке оператора я был удивлен, когда после решения я просмотрел ответ и увидел, что модификатор operator не требуется для метода compareTo : data class MyDate(val year: Int, val month: Int, val dayOfMonth: Int) : Comparable<MyDate> { override fun compareTo(other: MyDate) = when { year != other.year -> year – other.year […]

Как бесконечно повторять последовательность в Котлине?

Я хочу бесконечно повторять T элементы в Sequence<T> . Это невозможно сделать с помощью kotlin.collections.asSequence . Например: val intArray = intArrayOf(1, 2, 3) val finiteIntSequence = intArray.asSequence() val many = 10 finiteIntSequence.take(many).forEach(::print) // 123 Это не то, что я хочу. Я ожидал, что какая-то функция kotlin.collections.repeat существует, но ее нет, поэтому я сам реализовал ее […]