@kotlin_lang

Страница 122 из 982
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
handler: (T : Any) -> Unit
а в мапе тип Any же

Google
Badya
05.05.2017
11:22:44
Да

Quantum Harmonizer
05.05.2017
11:23:12
handler: (T : Any) -> Unit
где ты предлагаешь это написать?

? 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) }

fun <T> setHandler(clazz: Class<T>, handler: (T: Any) -> Unit) { handlers.put(clazz, handler) }
в итоге ожидает функцию от Any, а не от T

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

Quantum Harmonizer
05.05.2017
11:29:50
так что возьми мой вариант с wildcard

стирание типов же
типы стираются в рантайме, мы про то, как сделать проверку типов при компиляции, да так, чтобы оно потом скомпилировалось

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

Badya
05.05.2017
11:30:44
хранить handler: () -> Unit

obj.apply{handler}

Quantum Harmonizer
05.05.2017
11:31:00
хранить handler: () -> Unit
?! это же другой тип, даже если стереть

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

оно мало меняет в случае если делать через apply

? animufag ?
05.05.2017
11:33:31
в итоге ожидает функцию от Any, а не от T
Aaaa понял, он в том случае читает T просто как название параметра. не знал что так можно. я думал там будет уточнение для компилятора что Т – подтип Any

Quantum Harmonizer
05.05.2017
11:33:49
оно мало меняет в случае если делать через apply
тогда он будет Any.()->Unit, а проблема останется без изменений

Google
Quantum Harmonizer
05.05.2017
11:35:59
Мы же так Any уберем
Он же нам нужен.

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

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] } }

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

Quantum Harmonizer
05.05.2017
11:37:44
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] } }
эта функция не подходит! Она не принимает параметров, а по задаче должна принимать.

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
А кто-нибудь на котлине работал с этой библиотекой https://github.com/orhanobut/tracklytics? котлин с аоп дружит?
С AOP в лице AspectJ, насколько я помню, Android Gradle Plugin не очень дружит. Т. к. аспекты работают с байткодом, язык должен быть им безразличен (но это не точно).

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
В котлин оператор | это and
А есть где то доки об этом, как тогда выглядит оператор or ?

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 - это &

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