Кратко про анонимные классы и объекты, object и companion object
Анонимные классы — это классы, которые явно не объявлены с помощью class, наследуется от заданного класса или реализует заданный интерфейс.
Анонимный класс не всегда является синглтоном. Анонимный класс создается каждый раз при вызове соответствующего конструктора и используется только в контексте, где был создан. При этом каждый экземпляр анонимного класса имеет свое уникальное состояние и может отличаться от других экземпляров того же анонимного класса. В Kotlin анонимный класс создается следующим образом:
Экземпляры анонимных классов называют анонимными объектами, потому что они объявляются выражением, а не именем. Анонимный объект начинается с ключевого слова object.
• можно задавать свойства, функции, блоки инициализации;
• можно наследоваться от других классов и реализовывать интерфейсы;
• нельзя создавать конструкторы (как основные, так и вторичные).
Ключевое слово object позволяет одновременно объявить класс и создать его экземпляр (т.е. объект). При этом применять его можно по-разному:
• object Name — это объявление объекта (оbject declaration), реализация паттерна Singleton;
• companion object — это объект-компаньон внутри класса (также Singleton);
• object — это объект-выражение (анонимный объект/object expression), не Singleton.
Анонимные классы — это классы, которые явно не объявлены с помощью class, наследуется от заданного класса или реализует заданный интерфейс.
Анонимный класс не всегда является синглтоном. Анонимный класс создается каждый раз при вызове соответствующего конструктора и используется только в контексте, где был создан. При этом каждый экземпляр анонимного класса имеет свое уникальное состояние и может отличаться от других экземпляров того же анонимного класса. В Kotlin анонимный класс создается следующим образом:
val obj = object : SuperClassOrInterface() {Объекты анонимных классов полезны для одноразового использования.
// implementation here
}
Экземпляры анонимных классов называют анонимными объектами, потому что они объявляются выражением, а не именем. Анонимный объект начинается с ключевого слова object.
• можно задавать свойства, функции, блоки инициализации;
• можно наследоваться от других классов и реализовывать интерфейсы;
• нельзя создавать конструкторы (как основные, так и вторичные).
Ключевое слово object позволяет одновременно объявить класс и создать его экземпляр (т.е. объект). При этом применять его можно по-разному:
• object Name — это объявление объекта (оbject declaration), реализация паттерна Singleton;
• companion object — это объект-компаньон внутри класса (также Singleton);
• object — это объект-выражение (анонимный объект/object expression), не Singleton.