@KotlinLangRu

Страница 53 из 90
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
Я имею ввиду зачем они нужны, для чего, в чем преимущество или удобство? Как применять я смотрел уже

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
так для этого лямбды есть
у лямбд нет полей, нет this, и они определяют только один метод

это разные инструменты

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

Костя
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
Google
Костя
21.03.2018
08:05:04
что имеется ввиду под тремя уровнями безопастности в lazy ?

Quantum Harmonizer
21.03.2018
19:43:21
что имеется ввиду под тремя уровнями безопастности в lazy ?
Ой, что-то я слился неожиданно) Тут есть: http://kotlinlang.ru/docs/reference/delegated-properties.html

Костя
22.03.2018
08:30:48
lazy поддерживает три разных уровня безопасности и может использоваться как делегат
про уровни безопастности имелась ввиду потокобезопастность ? что Lazy например очень просто синхронизировать+можно передавать как параметр в методы другие это принципиальные отличия от синглтона

Костя
22.03.2018
08:31:25
ну в сравнении с синглтоном

по умолчанию работает в одном потоке(входным параметром это можно менять)

для lazy

Quantum Harmonizer
22.03.2018
08:32:10
ну в сравнении с синглтоном
синглтон сложно синхронизировать, что ли?

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

я именно говорил про вычисление

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

для синглтона менять до компиляции только это

ну или писать разные методы, и проверку и вызывать разные методы

Quantum Harmonizer
22.03.2018
08:34:14
для синглтона менять до компиляции только это
синглтону это не нужно, на самом деле

просто создаёшь инстанс в статическом инициализаторе

Костя
22.03.2018
08:35:20
просто создаёшь инстанс в статическом инициализаторе
а как это влияет на потокобезопастность ?

Страница 53 из 90