
Tima
20.03.2018
15:02:27
Зачем нужны анонимные классы

Dumitru
20.03.2018
19:00:51
Можно overrid'ить его методы (если это внутренний класс):
window.addMouseListener(object: MouseAdapter() {
override fun mouseClicked(e: MouseEvent) {
// ...
}
override fun mouseEntered(e: MouseEvent) {
// ...
}
})
Или можно использовать так (как значение):
fun foo() {
val adHoc = object {
var x: Int = 0
var y: Int = 0
}
print(adHoc.x + adHoc.y)
}
(как функция):
class C {
// Только private!
private fun foo() = object {
val x: String = "x"
}
fun bar() {
val x1 = foo().x
}
}

Google

Dumitru
20.03.2018
19:11:02
Еще для создания синглетонов (класс одиночка, который нужен лишь один раз):
object DataProviderManager {
fun registerDataProvider(provider: DataProvider) {
// ...
}
val allDataProviders: Collection<DataProvider>
get() = // ...
}
И уже можно использовать "DataProviderManager" без явной инициализации.
Все из документации: https://kotlinlang.org/docs/reference/object-declarations.html

Tima
21.03.2018
07:46:16
Я имею ввиду зачем они нужны, для чего, в чем преимущество или удобство? Как применять я смотрел уже

Quantum Harmonizer
21.03.2018
07:49:41

Tima
21.03.2018
07:52:29
ну т.е. аля быстро и не красиво что то реализовать

Quantum Harmonizer
21.03.2018
07:52:57

Tima
21.03.2018
07:53:33
просто ниразу еще не приходилось сталкиваться с необходимостью использования анонимных классов
и на днях вопрос задали по ним
я подумал зачем они вообще нужны)
https://habrahabr.ru/post/313350/
http://qaru.site/questions/23764/java8-lambdas-vs-anonymous-classes

Google

Костя
21.03.2018
07:57:25
ну когда тебе нужно например не делать целый класс(описывать, ради разового использования) ты можешь сразу на лету описать его и создать объект

Tima
21.03.2018
07:57:55
ну это же плохая практика

Костя
21.03.2018
07:58:00
почему ?
захламлять проект тысячей классов мне кажется хуже
например любой клик листенер в 90% на лету описывается же
а можно наследоваться и создавать свой типо и его использовать

Tima
21.03.2018
07:59:12
так для этого лямбды есть

Костя
21.03.2018
07:59:35
а если просто джава ?
ниже 8-ой

Quantum Harmonizer
21.03.2018
07:59:48
это разные инструменты

Костя
21.03.2018
08:02:19
кстати уже наверное вопрос и был здесь, да я упустил, в чем принципиальная разница lazy и синглтона

Quantum Harmonizer
21.03.2018
08:02:50

Костя
21.03.2018
08:02:50
и там и там по сути объект создается в момент доступа к нему в первый раз, и больше не пересоздается(используется уже созданный)
ну вот в моем понимании нет, хочу понять что не так я понимаю ))

Quantum Harmonizer
21.03.2018
08:03:56
lazy поддерживает три разных уровня безопасности и может использоваться как делегат

Tima
21.03.2018
08:04:02
потокобезопасен
https://medium.com/@BladeCoder/kotlin-singletons-with-argument-194ef06edd9e

Quantum Harmonizer
21.03.2018
08:04:42

Костя
21.03.2018
08:04:48

Google

Костя
21.03.2018
08:05:04
что имеется ввиду под тремя уровнями безопастности в lazy ?

Quantum Harmonizer
21.03.2018
19:43:21

Костя
22.03.2018
08:30:48

Quantum Harmonizer
22.03.2018
08:31:14

Костя
22.03.2018
08:31:25
ну в сравнении с синглтоном
по умолчанию работает в одном потоке(входным параметром это можно менять)
для lazy

Quantum Harmonizer
22.03.2018
08:32:10

Костя
22.03.2018
08:32:53
наоборот, по умолчанию оно многопоточное
По умолчанию вычисление ленивых свойств синхронизировано: значение вычисляется только в одном потоке выполнения, и все остальные потоки могут видеть одно и то же значение.
я именно говорил про вычисление

Quantum Harmonizer
22.03.2018
08:33:03

Костя
22.03.2018
08:33:39
ну то есть я вижу такую фишку мы можем определять в зависимости от какого-то параметра на лету, какая потокобезопастность нам нужна для lazy
для синглтона менять до компиляции только это
ну или писать разные методы, и проверку и вызывать разные методы

Quantum Harmonizer
22.03.2018
08:34:14
просто создаёшь инстанс в статическом инициализаторе

Костя
22.03.2018
08:35:20