Сообщения

Сообщения за январь, 2021

Константы времени компиляции в Kotlin

Изображение
Если значение свойства только для чтения известно во время компиляции, отметьте его как постоянную времени компиляции с помощью модификатора const. Такие свойства должны соответствовать следующим требованиям: Верхний уровень или член объявления объекта или сопутствующий объект (companion object). Инициализируется значением типа String или примитивным типом Нет специального получателя Такие свойства можно использовать в аннотациях: const val SUBSYSTEM_DEPRECATED: String = "This subsystem is deprecated" @Deprecated(SUBSYSTEM_DEPRECATED) fun foo() { ... } Свойства и переменные с поздней инициализацией Обычно свойства, объявленные как имеющие ненулевой тип, должны быть инициализированы в конструкторе. Однако довольно часто это не удобно. Например, свойства могут быть инициализированы с помощью внедрения зависимостей или с помощью метода настройки модульного теста. В этом случае вы не можете указать в конструкторе инициализатор, отличный от null, но вы все равно хо

Объявление свойств, геттеры и сеттеры в Kotlin

Изображение
Объявление свойств Свойства в классах Kotlin могут быть объявлены либо изменяемыми с помощью ключевого слова var, либо доступными только для чтения с помощью ключевого слова val. class Address { var name: String = "Holmes, Sherlock" var street: String = "Baker" var city: String = "London" var state: String? = null var zip: String = "123456" } Чтобы использовать свойство, просто обратитесь к нему по имени: fun copyAddress(address: Address): Address { // в Kotlin нет ключевого слова new val result = Address() result.name = address.name // вызываются методы доступа result.street = address.street // ... return result } Геттеры и сеттеры Полный синтаксис объявления свойства: var <propertyName>[: <PropertyType>] [= <property_initializer>] [<getter>] [<setter>] Инициализатор, геттер и сеттер не обязательны. Тип свойства является необязательным, е

Наследование в Kotlin

Изображение
Все классы в Kotlin имеют общий суперкласс Any, который является суперклассом по умолчанию для класса без объявленных супертипов: class Example // Неявно наследуется от Any У Any есть три метода: equals(), hashCode() и toString(). Таким образом, они определены для всех классов Kotlin. По умолчанию классы Kotlin являются окончательными: они не могут быть унаследованы. Чтобы сделать класс наследуемым, отметьте его ключевым словом open. open class Base //Класс открыт для наследования Чтобы объявить явный супертип, поместите тип после двоеточия в заголовке класса: open class Base(p: Int) class Derived(p: Int) : Base(p) Если производный класс имеет первичный конструктор, базовый класс может (и должен) быть инициализирован прямо здесь, используя параметры первичного конструктора. Если производный класс не имеет основного конструктора, то каждый вторичный конструктор должен инициализировать базовый тип с помощью ключевого слова super или делегировать другому конструк

Классы в Kotlin

Изображение
Классы в Kotlin объявляются с помощью ключевого слова class: class Invoice { /*...*/ } Объявление класса состоит из имени класса, заголовка класса (с указанием его параметров типа, основного конструктора и т. д.) и тела класса, заключенного в фигурные скобки. И заголовок, и тело не являются обязательными; если у класса нет тела, фигурные скобки можно опустить. class Empty Конструкторы Класс в Kotlin может иметь первичный конструктор и один или несколько вторичных конструкторов. Основной конструктор является частью заголовка класса: он идет после имени класса (и дополнительных параметров типа). class Person constructor(firstName: String) { /*...*/ } Если у основного конструктора нет аннотаций или модификаторов видимости, ключевое слово constructor можно опустить: class Person(firstName: String) { /*...*/ } Основной конструктор не может содержать никакого кода. Код инициализации может быть помещен в блоки инициализатора, которые имеют префикс с ключевым слово