@kotlin_lang

Страница 768 из 982
Bogdan
23.07.2018
17:55:29
Тогда что такое рефлексия?
Вместо того что бы работать с объектом мы работаем с его описанием (классом)

Quantum Harmonizer
23.07.2018
17:55:49
Alexander
23.07.2018
17:57:24
Опять таки, если мы этот проперти получили в компайл тайме, ничего рефлективного, просто синтаксический сахар. То, что осуждается начинается когда мы это получаем в рантайме.

Нарушаем статическую типизацию

Google
Alexander
23.07.2018
18:03:06
Ага. Но в приведенном примере - это просто ошика проектирвоания.

Я имею в виду постановку задачи

Quantum Harmonizer
23.07.2018
18:03:27
или любопытство :)

Bogdan
23.07.2018
18:03:52
Я вредный

Quantum Harmonizer
23.07.2018
18:04:27
Bogdan
23.07.2018
18:04:44
Как? Не Int? же.
Т по умолчанию Any?

Quantum Harmonizer
23.07.2018
18:05:25
Т по умолчанию Any?
Если пропертя неспособна обработать null, компилятор не позволит передать её

Beholder
23.07.2018
18:06:01
fun <T> addOne(obj: T, prop: KMutableProperty1<T, Int>) { prop.set(obj, prop.get(obj) + 1) }
fun addOne(prop: KMutableProperty0<Int>) { prop.set(prop.get() + 1) }

Bogdan
23.07.2018
18:06:05
или любопытство :)
Потом появляется спринг, хороший фрейморк, но костылей и магии, в рантайме падать неперепадать

Google
Bogdan
23.07.2018
18:06:50
чем он, простите, хороший?
Начальной простотой

Artem
23.07.2018
18:07:09
Kirill
23.07.2018
18:07:09
Все за тебя делает

Quantum Harmonizer
23.07.2018
18:07:15
Начальной простотой
очень тяжело по первости гуглить его невнятные сообщения об ошибках со стеком в сто методов

Bogdan
23.07.2018
18:08:06
очень тяжело по первости гуглить его невнятные сообщения об ошибках со стеком в сто методов
Да нет просто, но я с бутта начинал, мож потому и показалось легко

Kirill
23.07.2018
18:08:40
А сейчас на чём?

Quantum Harmonizer
23.07.2018
18:09:54
Все за тебя делает
всё то, что и так сделать несложно ;)

Bogdan
23.07.2018
18:20:46
А сейчас на чём?
Спринг бросил, если нада продолжу, но желания нет

Kirill
23.07.2018
18:24:12
всё то, что и так сделать несложно ;)
Почему бы это все не автоматизировать)

Json вручную парсить тоже не сложно

Спринг бросил, если нада продолжу, но желания нет
На что перешёл то, просто любопытно)

Quantum Harmonizer
23.07.2018
18:30:14
Json вручную парсить тоже не сложно
ну, довольно муторно, + с JSON вообще очень неприятно работать

Kirill
23.07.2018
18:31:29
В общем почему бы не автоматизировать то что можно автоматизировать)

Hakob
23.07.2018
21:24:56
какой json сериалайзер быстрее?

whalemare
24.07.2018
01:51:38
какой json сериалайзер быстрее?
https://github.com/fabienrenaud/java-json-benchmark/blob/master/README.md

Бери удобный и популярный, чтобы не было проблем. Если Хочешь скорости то тебе надо смотреть не в сторону жсона.

Kirill
24.07.2018
07:16:37
Зачем передавать отдельно геттер и сеттер?

Можно ж просто пропертю передать

Google
Andrew
24.07.2018
07:23:35
Это был пример решения задачи совсем без рефлексии, коей является использование KProperty. Варианты с ней были приведены вчера :)

Mikhail
24.07.2018
07:24:14
^?

Kirill
24.07.2018
07:24:50
Я кстати не уверен что KProperty идёт через рефлексию

Vladimir
24.07.2018
07:27:10
Я кстати не уверен что KProperty идёт через рефлексию
По-моему, работа с KProperty требует kotlin-reflect

Andrew
24.07.2018
07:27:18
а передать геттер и сеттер — не рефлексия? :)
Передавать две функции -- нет, очевидно. Ты ж сам ручками в функциях описываешь получение и установку значения.

Kirill
24.07.2018
07:27:50
По-моему, работа с KProperty требует kotlin-reflect
Только отдельные extension функции на нём вроде бы

Egor
24.07.2018
07:28:04
а передать геттер и сеттер — не рефлексия? :)
Рефлексия ли функции первого класса? ??

Mikhail
24.07.2018
07:28:28
а передать геттер и сеттер — не рефлексия? :)
ты не тянешь никаких данных о проперти. Работая с KProperty ты можешь поглядеть такие вещи как isLateinit, name и т.д.

Kirill
24.07.2018
07:43:11
ты не тянешь никаких данных о проперти. Работая с KProperty ты можешь поглядеть такие вещи как isLateinit, name и т.д.
Что не говорит о том что это всё тянется если ты только get/set используешь

Quantum Harmonizer
24.07.2018
07:47:16
Передавать две функции -- нет, очевидно. Ты ж сам ручками в функциях описываешь получение и установку значения.
Передача метод-референса — нет, очевидно. Ты ж сам ручками указываешь на эту пропертю.

Andrew
24.07.2018
07:48:27
Передача метод-референса — нет, очевидно. Ты ж сам ручками указываешь на эту пропертю.
Верно, но передать геттер с сеттером и передать KProperty — это всё же разные вещи.

Andrew
24.07.2018
08:00:59
effectively одно и то же
Заглянул в байт-код, согласен. По классу на каждый референс, конечно (но с лямбдами та же картина должна быть), из рефлективного там только getOwner() — getName() и getSignature() константы возвращают, get и set вполне себе в C.getX() и C.setX(...) ходят обычным INVOKEVIRTUAL.

Konstantine
24.07.2018
08:39:56
Это нормально, что jvmstatic переменая в companion в java получается через геттер?

Admin
ERROR: S client not available

Quantum Harmonizer
24.07.2018
08:43:31
Это нормально, что jvmstatic переменая в companion в java получается через геттер?
@JvmStatic == сгенерировать дополнительный(е) статический(е) метод(ы)

Konstantine
24.07.2018
08:44:08
@JvmStatic == сгенерировать дополнительный(е) статический(е) метод(ы)
А более стандартную статик переменную нельзя сделать?

Google
Quantum Harmonizer
24.07.2018
08:44:31
Konstantine
24.07.2018
08:45:04
Roman
24.07.2018
09:44:20
if (e.cause !is java.net.UnknownHostException || e.cause !is java.net.SocketException || e.cause !is java.net.ConnectException ) есть ли какой-нибудь другой способ это выразить ?

что-то вроде e.cause !is (firstException, secondException, ...)

Vladimir
24.07.2018
09:50:04
if (e.cause !is java.net.UnknownHostException || e.cause !is java.net.SocketException || e.cause !is java.net.ConnectException ) есть ли какой-нибудь другой способ это выразить ?
Что-то не то с этим условием, т.к. оно всегда истинно - исключение всегда не является чем-то из перечисленного. Да и ConnectException - это SocketException.

Leonid
24.07.2018
09:54:38
Через when можно

Bogdan
24.07.2018
09:57:54
Через when можно
Будет немног красивей)

Andrey
24.07.2018
10:09:06
if (e.cause !is java.net.UnknownHostException || e.cause !is java.net.SocketException || e.cause !is java.net.ConnectException ) есть ли какой-нибудь другой способ это выразить ?
Ну наверное связка через &&, а не через || А вам зачем такое? Какую задачу вы этой проверкой решаете? Вообще, instanceof (is в Kotlin) за пределами equals метода обычно является антипаттерном.

Konstantine
24.07.2018
10:24:24
Если у меня метод со значениями по умолчанию - он не будет кучкой переопределенных методов в java?

И можно ли такого добиться вообще?

Чтобы в java не вызывать a.method(null, null, null, null)

Konstantine
24.07.2018
10:26:36
@JvmOverloads
Спасибо

Странно, что оно по умолчанию не делает так.

Vladimir
24.07.2018
10:27:34
Странно, что оно по умолчанию не делает так.
Ну это далеко не всегда уместно, не говоря о том, что не всегда в этом есть необходимость. На Android вон методы не бесплатные)

Bogdan
24.07.2018
10:27:45
Google
Bogdan
24.07.2018
10:28:12
Странно, что оно по умолчанию не делает так.
Это нужно только для интертопа с джавой

Andrey
24.07.2018
10:48:37
За счёт sealed классов это не так
Ок, для Kotlin ещё в sealed классах может быть применимо, хотя подобные проверки и в sealed классах обычно можно свести к полиморфизму

а что если код не твой, а чекнуть надо?
Ну я и не сказал, что это прям не надо делать. Вопрос в том, для чего данная проверка понадобилась. Просто мне ни разу не приходилось решать задачу, при которой cause приходилось проверять именно так. Обычно возникает необходимость скорее таких ветвлений: when (e.cause) { is UnknownHostException -> {...} is SocketException -> {...} is ConnectException -> {...} else -> {...} }

Роман
24.07.2018
10:53:29
это плохое ветвление? Если да то как решить траблу?

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