
Sergey
05.05.2017
11:21:21
Спасибо

Badya
05.05.2017
11:21:53
handler: (T : Any) -> Unit
так тоже вроде заработало

Quantum Harmonizer
05.05.2017
11:22:27

Google

Badya
05.05.2017
11:22:44
Да

Quantum Harmonizer
05.05.2017
11:23:12

? animufag ?
05.05.2017
11:24:32
реально работает
что за магия
fun <T: Any> setHandler(clazz: Class<T>, handler: (T) -> Unit) {
handlers.put(clazz, handler)
}
так не работает
fun <T> setHandler(clazz: Class<T>, handler: (T: Any) -> Unit) {
handlers.put(clazz, handler)
}
так работает

Badya
05.05.2017
11:25:34
неа
Да но это не Тайп параметр вроде при ресолве

Quantum Harmonizer
05.05.2017
11:26:03

Badya
05.05.2017
11:26:03
val handlers = HashMap<Class<*>, (Any) -> Unit>()
fun <T : Any> setHandler(clazz: Class<T>, handler: (Any) -> Unit) {
handlers.put(clazz, handler)
}
вот так попробуй

Google

Quantum Harmonizer
05.05.2017
11:26:24

? animufag ?
05.05.2017
11:26:37

Badya
05.05.2017
11:26:58
=)

Quantum Harmonizer
05.05.2017
11:27:00
By the way.
inline fun <reified T> setHandler(noinline handler: (T)->Unit) {
setHandler(T::class.java, handler)
}

Dzmitry
05.05.2017
11:29:45
стирание типов же

Quantum Harmonizer
05.05.2017
11:29:50
так что возьми мой вариант с wildcard
стирание типов же
типы стираются в рантайме, мы про то, как сделать проверку типов при компиляции, да так, чтобы оно потом скомпилировалось

Badya
05.05.2017
11:30:30
хорошо есть альтернатива

Sergey
05.05.2017
11:30:38

Badya
05.05.2017
11:30:44
хранить handler: () -> Unit
obj.apply{handler}

Quantum Harmonizer
05.05.2017
11:31:00

Badya
05.05.2017
11:32:37
Ну суть в том чтобы заменить handle(obj) на obj.handle()
оно мало меняет в случае если делать через apply

? animufag ?
05.05.2017
11:33:31

Quantum Harmonizer
05.05.2017
11:33:49

Badya
05.05.2017
11:34:58

Google

Quantum Harmonizer
05.05.2017
11:35:59

Sergey
05.05.2017
11:36:02
private val handlers = HashMap<Class<*>, (Any) -> Unit>()
inline fun <reified T : Any> setHandler(noinline handler: (T) -> Unit) {
setHandler(T::class.java, handler)
}
fun <T> setHandler(clazz: Class<T>, handler: (T) -> Unit) {
handlers.put(clazz, handler) // ошибка
}
T not Any

Quantum Harmonizer
05.05.2017
11:36:30

Badya
05.05.2017
11:36:58
val handlers = HashMap<Class<*>, () -> Unit>()
fun <T> setHandler(clazz: Class<T>, handler: () -> Unit) {
handlers.put(clazz, handler)
}
fun example() {
val str = String()
str.apply { handlers[String::class.java] }
}

Quantum Harmonizer
05.05.2017
11:36:58

? animufag ?
05.05.2017
11:37:22
ладно, задам вопрос в слаке.

Quantum Harmonizer
05.05.2017
11:37:44

Sergey
05.05.2017
11:38:11
ЭЭэээ... но с проекцией я не могу сделать так:
handlers[message::class.java]?.invoke(message) ?: throw HandlerNotFoundException(message::class.java)

Quantum Harmonizer
05.05.2017
11:39:42
от этого никак не уйти

Badya
05.05.2017
11:39:58
val handlers = HashMap<Class<*>, (Any) -> Unit>()
fun <T> setHandler(clazz: Class<T>, handler: (T) -> Unit) {
handlers.put(clazz, handler as (Any) -> Unit)
}видно что хэндлер задуман принимать то что ему надо похендлить, я предложил развернуть - тем самым избавиться от параметра с помощью apply

? animufag ?
05.05.2017
11:49:57
@Harmonizr ладно, со второго раза дошло

Quantum Harmonizer
05.05.2017
12:55:48
Хорошо
В Slack подсказали: HashMap<Class<*>, (Nothing)->Unit>()

Sergey
05.05.2017
12:57:54
Спасибо

Pavel
05.05.2017
13:49:32
А кто-нибудь на котлине работал с этой библиотекой https://github.com/orhanobut/tracklytics? котлин с аоп дружит?

Quantum Harmonizer
05.05.2017
13:51:24

Sergey
05.05.2017
13:59:59
Должен дружить. У нас в проекте часть на java часть на котлине написана. С Aspectj никаких проблем не замечено

Андрей
05.05.2017
14:02:00
Есть такой плагин https://github.com/HujiangTechnology/gradle_plugin_android_aspectjx
Но с ним тоже проблемы бывают. Так что на свой страх и риск

Google

Badya
05.05.2017
14:20:39
https://github.com/Archinamon/GradleAspectJ-Android
Вот хороший плагин, по вопросам можно в ЛС

Pavel
05.05.2017
14:22:00
меня интересует конкретная реализация https://github.com/orhanobut/tracklytics, по какой то неведомой причине я не могу запустить tracker в целом...

Badya
05.05.2017
14:29:39
Ну плагин который собирает аспекты достаточно странновато написан, не удивительно что может не взлетать
он делает javaCompile.doLast, а нужно делать это в transform по идее
тогда после всех компиляций спокойно будут произведены все трансформы байткода

Admin
ERROR: S client not available

Dzmitry
06.05.2017
08:50:53
Кто нибудь знает, psi IntelliJеевский котлин умеет
вообще, чем котлиновский AST разбирать?

Boris
06.05.2017
19:06:48
смотря зачем разбирать
хотя если имеется ввиду: как из исходника получть аст, то довольно несложно найти код в компиляторе, который строит аст, его вполне реально использовать

Vladimir
07.05.2017
11:43:25
Всем привет, пытаюсь заюзать kotlin android extensions в фрагменте и всё падает, как обойти этот выстрел в ногу ?
Почему progressBar получается null ?
override fun onCreateView(inflater: LayoutInflater?, container: ViewGroup?, savedInstanceState: Bundle?): View? {
val view = inflater?.inflate(R.layout.fragment_main, container, false)
progressBar.visibility = View.VISIBLE
return view
}

Михаил
07.05.2017
11:44:42
если нужно прям отсюда установить визибилити, то прийдется скорее всего получать прогресбар из вьюхи руками
view.findViewById(R.id.progressBar)

Vladimir
07.05.2017
11:45:52
@Mihail_t спасибо, как я понимаю android extensions в фрагменте юзать не получится ?

Михаил
07.05.2017
11:46:02
получится
после onCreateView

Vladimir
07.05.2017
11:46:39
@Mihail_t Спасибо, понял

Konstantin
07.05.2017
11:51:55
@tahar0 kotlin android extensions можно использовать на view: view.progressBar. Только там импорт будет немного другой.

Vladimir
07.05.2017
11:52:50
@KrevedAccky как поменять этот импорт что бы работало ?
import kotlinx.android.synthetic.main.fragment_main.*

Google

Vladimir
07.05.2017
11:53:40
добавить view в конце ?
import kotlinx.android.synthetic.main.fragment_main.view.*

Konstantin
07.05.2017
11:53:56
да, правильно

Vladimir
07.05.2017
11:54:38
@KrevedAccky Спасибо, попробую

Quantum Harmonizer
07.05.2017
12:33:35
view.progressBar.visibility = ...

Konstantine
07.05.2017
14:55:57
toastBody.paintFlags | Paint.STRIKE_THRU_TEXT_FLAG
Выдает ошибку при таком коде, я что-то не понимаю или что?)
Ошибка: unexpected tokens use ";" to separate expressions on the same line
holder.binding.toastBody.paintFlags = (holder.binding.toastBody.paintFlags | Paint.STRIKE_THRU_TEXT_FLAG)
Вот такое выражение целиком.
Нужно побитовое или, а что-то никак

Sergey
07.05.2017
14:57:54
В котлин оператор | это and
Если не ошибаюсь

Konstantine
07.05.2017
14:58:08
and?
или or таки?

Sergey
07.05.2017
14:58:43
and. Тебе же надо несколько флагов

Konstantine
07.05.2017
14:59:19
010 and 101 = 000
010 or 101 = 111
Но а так даже не думал, что у котлина словами, спасибо)

Vladimir
07.05.2017
17:45:33

Sergey
07.05.2017
17:46:57
https://kotlinlang.org/docs/reference/basic-types.html#operations

Vladimir
07.05.2017
17:47:47

Андрей
07.05.2017
17:51:32
только | все таки or. and - это &