
Siarhei
19.02.2018
19:08:17
в андроид чате не помогли с этоим

Руслан
19.02.2018
19:08:52

Даниил
19.02.2018
19:09:26

Igor
19.02.2018
19:10:03

Google

Igor
19.02.2018
19:10:14
Я думал, может какой-то адекватный способ есть.

Даниил
19.02.2018
19:12:30
inline fun <reified T: C> foo(list: List<T>) {
when (T::class) {
A -> ...
B -> ...
else -> ...
}
}

Igor
19.02.2018
19:13:30
merci

Даниил
19.02.2018
19:14:52
sealed class C
data class A(val x: Int) : C()
data class B(val x: Double) : C()
inline fun <reified T: C> foo(list: List<T>) {
println(T::class)
}
fun main(args: Array<String>) {
foo(listOf(A(42), A(5)))
foo(listOf(B(3.14)))
foo(listOf(A(42), B(3.14)))
}
вот даже так
выводит A, B, C соответственно
на пустом списке выводит C (как наиболее общий подходящий тип видимо)

Igor
19.02.2018
19:15:48
Супер, то что нужно!
Спасибо огромнейшее ;)

Даниил
19.02.2018
19:20:28
на всякий случай покапитаню – в джаву эта функция торчать конечно не будет, если у тебя вдруг какое-то библиотечное API
и если у тебя изначально другая функция возвращает List<C>, то даже если все элементы в ней будут типа A, для компилятора там будет тип C (поэтому я изначально и подумал что это решение тебе не подойдёт)

Igor
19.02.2018
19:21:38

Даниил
19.02.2018
19:23:27
микс в List<C> – это условно val list : List<C> = if (...) { /* List<A> */ } else { /* List<B> */ }?

Google

Даниил
19.02.2018
19:23:35
нет, не заработает

Igor
19.02.2018
19:25:40
Понял, спасибо.
ну, по итогу просто A::class to someSourceA прокидываю, как самое безболезненное решение ;)

Даниил
19.02.2018
19:33:05
я тут ещё чё подумал – в принципе ты можешь врапать список в sealed class
типа:
sealed class ListC
data class ListA(list: List<A>) : ListC()
data class ListB(list: List<B>): ListC()
ну и потом делать что-то типа
val list : ListC = if ( ... ) {
ListA( /* List<A> */ )
} else {
ListB( /* List<B> */ )
}
fun foo(list: ListC) {
when (list) {
is ListA -> ...
is ListB -> ...
}
}

Quantum Harmonizer
19.02.2018
19:35:44
class ReifiedList<T>(val list: List<T>, val type: Class<T>) : List<T> by list

Даниил
19.02.2018
19:36:07
или так

Igor
19.02.2018
19:37:58
Да, тоже вариант. Хотя пока-что наверное оставлю вариант с передачей KClass и unchecked-кастами просто потому, что компактнее

Bogdan
19.02.2018
19:38:46

Quantum Harmonizer
19.02.2018
19:39:00

Bogdan
19.02.2018
19:39:32

Igor
19.02.2018
19:39:34
эту фичу Бреслав хочет убрать
И будем вечно сидеть на котлин 1.2, как сейчас сидим на pre-26х build tools в андроиде :) Потому что новое ломается ;)

Quantum Harmonizer
19.02.2018
19:40:04

Bogdan
19.02.2018
19:40:12

Quantum Harmonizer
19.02.2018
19:41:03

Igor
19.02.2018
19:41:51

Quantum Harmonizer
19.02.2018
19:42:59

Igor
19.02.2018
19:44:19
Вах-вах-вах. К счастью, мы для организаций делаем приложеньки, которые закупают два-три типа устройств и на всех все работало.

Sergey
19.02.2018
19:46:34

Quantum Harmonizer
19.02.2018
19:47:02

Google

You
19.02.2018
19:47:02

Sergey
19.02.2018
19:47:22
сомневаюсь
неофициальные прошивки всегда ведь были важны (нет)

You
19.02.2018
19:48:24
Почти всегда были
Со времён 2 андроида

Sergey
19.02.2018
19:48:41
тем более они не проходили CTS

You
19.02.2018
19:48:59
Когда в циан добавляли кучу фич, из которых Гугл ботом брал себе

Quantum Harmonizer
19.02.2018
19:50:44

You
19.02.2018
19:51:05
Гигантское сообщество за этим стоит

Sergey
19.02.2018
19:51:54
относительно чего гигантское?

Artem
19.02.2018
19:52:19
Относительно юзеров ведра

Andrew
19.02.2018
19:52:29
Вы, наверное, о разных сторонах говорите. Многим разработчикам софта действительно на кастомные прошивки насрать, к сожалению, ибо они составляют малый процент пользователей. Но это не отменяет того, что за кастомными прошивками стоит большое число людей. Я сам сижу на линейке и очень ей рад.
</срач>

Жабра
19.02.2018
19:53:32
Имхо: когда project treble начнет ставиться в каждый ведрофон - кастомки потеряют большую часть пользователей.

Sergey
19.02.2018
19:53:38
ниразу не видел какой либо статистики по CM(Lineage)

Quantum Harmonizer
19.02.2018
19:54:45
Полтора миллиона активных пользователей.
https://stats.lineageos.org/

Andrew
19.02.2018
19:55:14

Quantum Harmonizer
19.02.2018
19:55:25
Сколько ведрофонов? Миллиард? Тогда миллион вполне соизмерим с аудиторией какого-нибудь Meizu.

Artem
19.02.2018
19:55:29
Это не считая других кастомок

Google

Sergey
19.02.2018
19:55:34

Quantum Harmonizer
19.02.2018
19:56:10

Sergey
19.02.2018
19:56:19
где нормальный андроид и gp services

Artem
19.02.2018
19:56:47
Я юзер нексус 6р и юзер нитрогена/лос/стока попеременно))

You
19.02.2018
19:56:58

Quantum Harmonizer
19.02.2018
19:57:22
короче, пользователи есть, бездумно ломать инструменты нельзя, предлагаю на этом оффтоп закончить

You
19.02.2018
19:58:06
Да

Andrew
19.02.2018
19:59:49
где нормальный андроид и gp services
Официальный MIUI на китайцах язык не поворачивается назвать нормальным андроидом в сравнении с Lineage OS. На нексусах / пикселях мир не заканчивается, к сожалению.
Плейсервисы на линейку завезти существует тысяча и один способ, opengapps суть один из самых удобных на данный момент. Так что не понимаю, в чём проблема с "нормальным андроидом и плейсервисами" в привязке к кастомным прошивкам.

Sergey
19.02.2018
20:00:35

Andrew
19.02.2018
20:01:28

Sergey
19.02.2018
20:01:30
open gapps порезанный до нельзя сервисы, из-за которых часто что-то не работает

Andrew
19.02.2018
20:02:18

Quantum Harmonizer
19.02.2018
20:03:15
если кто-нибудь хочет продолжать обсуждение, приглашаю в @pofftop

Sergey
19.02.2018
20:03:24

Andrey
19.02.2018
20:58:06

Quantum Harmonizer
19.02.2018
20:58:35

Vladislav
19.02.2018
21:01:56
Всем привет, никто не сталкивался с проблемой, в js, для доступа к нужному this, часто приходится использовать конструкцию типа val self = js("this") as T. Видел в Typescript для этого this parametres используются. Хотелось бы какое-нибудь решение, чтобы this постоянно явно не присваивать. Пока что написал extension, который принимает лямбду с this в качестве первого аргумента, но все равно как-то не очень удобно постоянно в конце дописывать этот extension.

Sergey
19.02.2018
21:06:56
вроде прболем не было, котлин всегда кмопилировал this во что нужно, сохраняя его где нужно. можете привести пример?

Vladislav
19.02.2018
21:14:23
В Vue, внутри methods или watch

Google

Dibro
19.02.2018
21:20:08
внутри DSL'ей свои this'ы, используй this@... для доступа к нужному
если ты про это, конечно
ide сама подсказывать должна по-идее

Vladislav
19.02.2018
21:26:21
Есть object, который представляет собой Vue-компонент и наследуется от external Vue класса, нормальный доступ к this есть только внутри хуков типа mounted, created. Внутри methods, есть доступ только к this object-a и methods. Для того, чтобы Vue-вский this получить приходится что-то подобное писать.

Dibro
19.02.2018
21:29:23

Vladislav
19.02.2018
21:32:49
Ну здесь да, ну вообще, примерно так выглядит object AppComponent : Vue() {}.
Когда es6 использовал, там при компиляции примерно также и происходило. Удобно было бы, чтобы как в Typescript, можно было написать что-то типа fun myFun(this: Vue)

Dibro
19.02.2018
21:33:52

Vladislav
19.02.2018
21:36:40

Dibro
19.02.2018
21:38:23

Vladislav
19.02.2018
21:39:16
В общем-то в typescript definitions это вот так выглядит: type DefaultMethods<V> = { [key: string]: (this: V, ...args: any[]) => any };
Потом при компиляции этот this автоматом подставляется

Andrew
19.02.2018
21:51:40
А у вас там творится та же магия, что и в тайпскриптовом vue-class-component, где базовый класс работает декоратором и в рантайме отсутствует?

Vladislav
19.02.2018
22:30:31

Andrew
19.02.2018
22:35:03