@kotlin_lang

Страница 751 из 982
1337
12.07.2018
10:43:41
даже после исправления ошибок торможение прдолжается и помогает только ребут

Kirill
12.07.2018
10:46:12
А какой у тебя xmx в идее?

1337
12.07.2018
10:48:48
хз дефолтный

а где менять?

Google
Andrey
12.07.2018
10:49:19
Сам спросил, сам отвечу: class Component<T>(private val builder: () -> T) { private var instance: T? = null fun getInstance() = instance ?: builder().also { instance = it } fun destroy(){ instance = null } } Ну и пропертя: private var mainComponent = Component<MainComponent>({ getAppComponent().mainComponentBuilder().build() }) Норм?
Можно реализовать свой Lazy: class ResettableLazy<out T>(private val initializer: () -> T) : Lazy<T> { @Volatile private var t: T? = null override val value: T get() { val t1 = t if (t1 !== null) { return t1 } return synchronized(this) { val t2 = t if (t2 !== null) { t2 } else { val t3 = initializer() t = t3 t3 } } } override fun isInitialized(): Boolean = t !== null fun reset() = synchronized(this) { t = null } } typealias MainComponent = Int val mainComponentLazy = ResettableLazy(::initMainComponent) val mainComponent: MainComponent by mainComponentLazy private var i = 0 fun initMainComponent() = i++ fun main(args: Array<String>) { println(mainComponent) println(mainComponent) mainComponentLazy.reset() println(mainComponent) println(mainComponent) mainComponentLazy.reset() println(mainComponentLazy.value) println(mainComponentLazy.value) mainComponentLazy.reset() println(mainComponentLazy.value) println(mainComponentLazy.value) }

Aleksey
12.07.2018
10:51:32
Ну да, к этому и пришли в итоге, ток потокобезопасность пока не требуется

Andrey
12.07.2018
10:52:57
Ну да, к этому и пришли в итоге, ток потокобезопасность пока не требуется
Я потокобезопасность тупо из SDK утащил. Из kotlin.SynchronizedLazyImpl

picty
12.07.2018
12:10:08
Ребята, подскажите пожалуйста - нужен таймер, который по истечению времени дергает метод и снова запускается. Пока его не остановят. Поиск путается с java решениями, но подозрваю в Kotlin есть что-то своё. Направьте пожалуйста :)

picty
12.07.2018
12:15:45
Я бы сделал val job = launch { while (true) { delay(2, TimeUnit.SECONDS) foo() } } Потом можно в любой момент остановить
Интересный вариант, но можно подобное сделать и через CountDownTimer - перезапуская его при финише Просто думал есть именно таймер для повторяющихся задач - вынесенный отдельно.

picty
12.07.2018
12:16:32
inline fun Timer.schedule( delay: Long, period: Long, crossinline action: TimerTask.() -> Unit ): TimerTask (source) https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.concurrent/java.util.-timer/schedule.html

Dimon
12.07.2018
12:26:55
а как вы код в чате форматируете? 0_о

что за магия

Хекс
12.07.2018
12:27:18
секрет

пкм/formating

Dimon
12.07.2018
12:29:06
о, спс

Google
Dimon
12.07.2018
12:29:18
чёрточки тоже работают

хотя не так красиво

Dmitriy
12.07.2018
12:42:49
всем привет. а в котлине можно как-то не типизировать дженерик, кроме как писать a: A<*> ? Т.е. если мне на определённом этапе уже совсем не важно, что там внутри лежит, можно как-то тип упростить?

Dimon
12.07.2018
12:44:40
ну может A<Any> ?

Anton
12.07.2018
12:44:42
Это итак говорит что совсем не важно

Dimon
12.07.2018
12:44:44
хотя я хз если честно

Anton
12.07.2018
12:44:49
Роу типов нет

Dmitriy
12.07.2018
12:44:53
ну так это везде писать приходится

Anton
12.07.2018
12:45:11
А зачем ты сделал тогда класс с типом

Dimon
12.07.2018
12:45:14
class B: A<Any>

Dmitriy
12.07.2018
12:46:25
А зачем ты сделал тогда класс с типом
ну там тип нужен, когда бизнес логика работает. а когда оно в базу данных через рефлекшн сохраняется. там уже совсем не важно, какой был параметр

class B: A<Any>
у меня объект же передаётся, как я могу новый класс использовать?

Dimon
12.07.2018
12:48:28
typealias?

ну типа typealias B = A<*>

Dmitriy
12.07.2018
12:48:44
typealias?
а его можно так использоватЬ? прикольно

Dimon
12.07.2018
12:48:56
в душе не ебу, попробуй)))

студия вроде не ругается

Dmitriy
12.07.2018
12:49:56
в душе не ебу, попробуй)))
слушай да, работает ) спасибо )

я чего-то не подумал даже в эту сторону

Dimon
12.07.2018
12:50:07
лол, круть)

Google
Dmitriy
12.07.2018
12:53:32
меня уже начали нервировать эти <*, *>

они ещё и на смайлик похожи

Igor
12.07.2018
12:56:48
меня уже начали нервировать эти <*, *>
Так поменьше их юзай, это тебе намек ?

Oleg
12.07.2018
12:57:38
Dmitriy
12.07.2018
12:59:01
Так поменьше их юзай, это тебе намек ?
ну в коде есть места, где типы важны. но вот при работе с базой данных в них вообще смысла нет

Dmitriy
12.07.2018
13:06:05
А зачем рефлекшин ?
а как я у знаю, какие поля у объекта, чтобы его в базу положить?

Anton
12.07.2018
13:06:33
орм?

Dmitriy
12.07.2018
13:06:56
орм?
хуже, NoSQL

Bogdan
12.07.2018
13:07:10
хуже, NoSQL
Есть орм для них

Anton
12.07.2018
13:07:18
для монги вроде вообще что то крутое было

Dmitriy
12.07.2018
13:07:33
для монги вроде вообще что то крутое было
работающее через рефлекшн )

Bogdan
12.07.2018
13:07:47
орм?
Точно нет ибо тогда бы рефлексия спрятана была бы

Dmitriy
12.07.2018
13:08:27
Точно нет ибо тогда бы рефлексия спрятана была бы
я использую спринговый MongoTemplate, там внутри обычный рефлекшн

Bogdan
12.07.2018
13:08:40
работающее через рефлекшн )
К тебя монга ? Видел либу на котлин

Dmitriy
12.07.2018
13:08:48
да, монга

просто задача преобразования Any в Document всё равно без рефлекшена не решается, в общем случае

Sergey
12.07.2018
13:09:45
http://litote.org/kmongo/

Bogdan
12.07.2018
13:15:32
Dmitriy
12.07.2018
13:16:23
Она
так она тоже на рефлекшене основана

Google
Sergey
12.07.2018
13:18:04
вот скажите, у вас не пригорает от такой записи с JSR330 class A @Inject constructor(val b: B) вместо @Component class A(val b: B) ?

Bogdan
12.07.2018
13:18:39
Konstantin
12.07.2018
13:18:43
Вообще, надо писать if(a?.b ?: false)
necropsto tiem! === idea подсказывает: if (a?.b == true)

Dmitriy
12.07.2018
13:19:43
Ну да, только внутри
так у меня тоже внутри ) это приватные методы, которые объект в документ преобразовывают. вот именно в них когда передаётся, не так важно уже, чем параметризовывались классы. потому что они в итоге передаются в функции, которые вообще Object просят

Bogdan
12.07.2018
13:19:45
Ну да, только внутри
Ну зависит от задачи, может тебе не подходит

Dmitriy
12.07.2018
13:20:14
MongoTemplate же тоже типа ORM некоего

т.е. оно умеет из объекта и в объект преобразовывать

Admin
ERROR: S client not available

Dmitriy
12.07.2018
13:22:22
он не нужен в приватном методе, который отвечает непосредстванно за запись объекта в базу данных ) в том паблик методе, из которого он вызывается, естественно типы записаны полностью, чтобы нельзя было вызвать с левыми типами

ну и там не Any, естественно

Александр
12.07.2018
13:24:01
Привет, ребят. Не подскажите, в груви, например, к предпоследнему символу в строке можно было обратится вот так : str[-2] В котлине же только следующей конструкцией можно сделать подобное - str[str.length - 2] ?

Dmitry
12.07.2018
13:25:11
Напиши экстеншн, который инлайнится, и обращайся как угодно. Но вообще да.

Александр
12.07.2018
13:26:44
Экстеншн понятно, я думал уже что-то написанное есть. Спасибо за ответ

Dmitriy
12.07.2018
13:27:50
Может спринг дата с репами ?
MongoTemplate - это и есть Spring Data. Просто не всё можно свести к обычным крудам, поэтому работа с частью данных не через репозитории идёт

так-то понятно, что большая часть будет обычные репозитории

dimiii
12.07.2018
13:28:28
Экстеншн понятно, я думал уже что-то написанное есть. Спасибо за ответ
Есть такое, может помочь не ошибиться с расчетами https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/last-index.html

Sergey
12.07.2018
14:01:37
Может кто знает: Можно ли как-то заставить AS котяб предупреждать , о том , что метод может бросить исключение, когда пишешь на kotlin-e? а то бывает , когда юзаешь сторонние либы не всегда помнишь что нужно проверить броасет ли метод исключение.

Google
Igor
12.07.2018
14:06:30
Зачем? Что бы на каждом уровне заворачивать в try/catch + log + rethrow - ну такое.

picty
12.07.2018
14:53:31
Есть ScheduledExecutorService. Делает как раз это
Реализовал таким образом: timer = fixedRateTimer("MyUpdate", false, 0, 5000){ loadItems() }

Жабра
12.07.2018
14:56:04
Аннотация @Throws
Это не обязывает проверять исключения.

Sergey
12.07.2018
14:56:27
Зачем? Что бы на каждом уровне заворачивать в try/catch + log + rethrow - ну такое.
заварачивать или нет - я сам решу. мне нужно что Intellij Idea хотяб подмигнула в нужном месте

Alexander
12.07.2018
14:56:46
Не обязывает, но напоминает.

Жабра
12.07.2018
14:57:05
Не обязывает, но напоминает.
С таким же успехом можно писать в джавадоке

Исключения.

Quantum Harmonizer
12.07.2018
14:57:17
так и делают :)

Dmitry
12.07.2018
14:57:36
Разве ИДЕ напоминает про исключения из джавадока?

Igor
12.07.2018
14:57:36
заварачивать или нет - я сам решу. мне нужно что Intellij Idea хотяб подмигнула в нужном месте
А в смысла в этом 0. CheckedException нет в языке, а что бы IDEA анализировала вызываемые методы, ну фиг знает - вроде пока никому не нужно

Жабра
12.07.2018
14:58:24
Dmitry
12.07.2018
14:58:28
Мне кажется это должно быть на уровне плагина. Чтобы справа или слева иконку подсвечивал, если из этого метода видно, что эксепшн полетит.

Alexander
12.07.2018
14:58:30
Ну, я думаю, что сделать соответствующую инспекцию не сложно. Так что лучше аннотацию

Igor
12.07.2018
14:58:35
А в смысла в этом 0. CheckedException нет в языке, а что бы IDEA анализировала вызываемые методы, ну фиг знает - вроде пока никому не нужно
Надо смирится, что в языках без контроля эффектов - (runtime) исключение может свалится откуда угодно

dimiii
12.07.2018
14:59:29
заварачивать или нет - я сам решу. мне нужно что Intellij Idea хотяб подмигнула в нужном месте
Александр упомянул @Throws как о хорошем стиле в котлин (в некоторых языках и такой роскоши нет). Дальше рецепт такой - берется ktlint/detekt ищется check или пишется свой

Страница 751 из 982