@jvmchat

Страница 2830 из 2890
Володимир
26.09.2018
14:36:02
типа: void foo() { boo(); } void boo() { try { throw new Exception(); } catch (Exception ex) { ex.printStackTrace(); } }
тоесть printStackTrace() будет работать везде, кроме визова из foo()

Yury
26.09.2018
14:39:43
Скажите где прочитать про такое поведение компилятора? class A{ final int a = 1; public int getA() { return a; } } A aObj = new A(); Field field = A.class.getDeclaredField("a"); field.setAccessible(true); field.set(aObj, 2); System.out.println(aObj.getA()); //1 System.out.println(aObj.a); //1 System.out.println(field.get(aObj));//2Если инициализировать в конструкторе, то везде 2. Где можно про это прочитать?

Google
Nick
26.09.2018
14:51:58
так ведь заинлайнено же

elefus
26.09.2018
14:52:10
Опередили) Глянул на байткод getA() - там компилятор использовал "константность" final-поля и заинлайнил его // access flags 0x1 public getA()I L0 LINENUMBER 30 L0 ICONST_2 IRETURN L1 LOCALVARIABLE this Lcom/epam/se01/A; L0 L1 0 MAXSTACK = 1 MAXLOCALS = 1

Nick
26.09.2018
14:52:17
вы думаете System.out.println(aObj.a); вот тут не видно что a финальное?

покажите байткод всего что у вас получается

а не только класса A

System.out.println(aObj.a); это заменится на System.out.println(1);

elefus
26.09.2018
14:53:23
GETSTATIC java/lang/System.out : Ljava/io/PrintStream; ALOAD 1 INVOKEVIRTUAL java/lang/Object.getClass ()Ljava/lang/Class; POP ICONST_2 INVOKEVIRTUAL java/io/PrintStream.println (I)V

все верно, компилятор в месте использования A.a подставил значение 2 сразу (ICONST_2)

Nick
26.09.2018
14:54:13
ICONST_2 = 1

это у вас еще в getA() есть

elefus
26.09.2018
14:54:38
не я топикстартер я компилил с двойкой)

Nick
26.09.2018
14:55:00
упс) я чтот прозевал что отвечает другой)

Google
elefus
26.09.2018
14:55:03
ICONST_2 все-таки загружает интовое значение 2 на стек

Nick
26.09.2018
14:55:34
тогда не предметно разговор, может с 1 скомилите?

elefus
26.09.2018
14:56:01
ничего не изменится) отличаться будет только на ICONST_1

Nick
26.09.2018
14:56:20
эт да, зато путаницы не будет)

elefus
26.09.2018
14:57:35
GETSTATIC java/lang/System.out : Ljava/io/PrintStream; ALOAD 1 INVOKEVIRTUAL java/lang/Object.getClass ()Ljava/lang/Class; POP ICONST_1 INVOKEVIRTUAL java/io/PrintStream.println (I)V

скомпилено с final int a = 1;

Yury
26.09.2018
15:00:44
По идее это должно быть описано где то в java доках?

Nick
26.09.2018
15:01:23
а может просто не надо менять финальные поля?

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

Yury
26.09.2018
15:03:45
Видимо поэтому jackson @JsonProperty не final поля. Тк инжектится рефлексией и будет такая вот оптимизация.

а может просто не надо менять финальные поля?
Хотелось сделать иммутабельный объект-значение с инжектом пропертей через рефлексию.

Nick
26.09.2018
15:10:28
так какой же он у вас иммутабельный если вы его меняете

Alexandr
26.09.2018
15:11:10
Пахнет сбером/госбанком и госкомпаниями
Ага. У них еще на линуксовых машинах(на стенде) стоит касперский, который съедает 50 гб харда и 4 оперативы, при том что модуль нашей системы от 0.5 до 4

Yury
26.09.2018
15:16:21
так какой же он у вас иммутабельный если вы его меняете
Ну типа один раз в начале рефлексия по полям проходит и инжектит значения.

Nick
26.09.2018
15:17:06
иммутабельный это когда конструктор завершил свою работу и после этого поля не меняются

что вам мешает создать действительно иммутабельный объект но через какойнить билдер или еще какую конструкцию с которой уже будете извращаться с рефлексией

Yury
26.09.2018
15:22:25
что вам мешает создать действительно иммутабельный объект но через какойнить билдер или еще какую конструкцию с которой уже будете извращаться с рефлексией
Там очень много значений. Это та же тема что и у jackson. Десериализация/сериализация. Ради это дублировать эту кучу полей еще и в билдер глупо. У jackson поля просто private(не final) без сеттеров. Получается оптимальное решение для такого случая.

Nick
26.09.2018
15:23:00
private(не final) без сеттеров - вполне себе иммутабельность

Google
Yury
26.09.2018
15:23:13
Просто я хотел еще, чтобы какой-нибудь Вася не написал сеттер.

Ладно, спасибо вам за разбор!

ARDEV
26.09.2018
15:26:15
\

Yury
26.09.2018
15:26:27
Почему глупо?
Потому что дублирование)

Со всеми вытекающими

Mikhail
26.09.2018
15:26:47
Потому что дублирование)
Ну билдер и нужен для таких вещей

Yury
26.09.2018
15:28:13
Ну билдер и нужен для таких вещей
Ну наверное не тогда когда пропертей 50 штук? Или норм?)

Вообщем решение jackson с json мне вполне импонирует.

Oleksandr
26.09.2018
16:10:57
private(не final) без сеттеров - вполне себе иммутабельность
нет, это "прайват без сеттеров" больше того, слегка расширяя сабж, штуки типа "а давайте лист завернем в обертку, в которой нет методов для изменения содержимого" тоже не иммутабельность (корректнее unmodifiable), а хак (иногда оправданный)

Nick
26.09.2018
16:15:47
тут наверное вопрос в чем отличие иммутабельности на финальных полях от иммуутабельности на прайватах с отсутвием сеттеров, но с финалом на классе

Oleksandr
26.09.2018
16:20:37
я больше о том, что слово "иммутабельность" слегка перегружено разными значениями, и для "финальных полей" его некорректно использовать

"неизменяемость ссылки" мб, хз

elefus
26.09.2018
16:26:07
Потому что дублирование)
@Builder, если используете Lombok: https://projectlombok.org/features/Builder

Slava
26.09.2018
16:36:56
попытался сегодня запустить IDEA на openjdk11 (не с той jre, который идёт в комплекте с IDEA), получил ClassNotFoundException относительно swing . Знаю, что у IDEA свой пропатченный swing есть, кто знает как лечить проблему? подложить джарник в classpath ?

запускалось как JAVA_HOME=/path/to/jdk11 $IDEA_PATH/bin/idea.sh

Vyacheslav
26.09.2018
16:39:24
запускалось как JAVA_HOME=/path/to/jdk11 $IDEA_PATH/bin/idea.sh
IIRC, они из 11 выпилил swing и javafx. И их теперь надо отдельно скачивать

Slava
26.09.2018
16:39:35
принято

спс

Google
Admin
ERROR: S client not available

Bogdan
26.09.2018
17:50:34
Слишком много подкапотной магии
мы ведь про спринг говорим

видео Евгения Борисова?
+ дань и почетания ему

Oleg
26.09.2018
19:59:18
https://habr.com/company/jugru/blog/424543/

guga
26.09.2018
20:03:54
https://habr.com/company/jugru/blog/424543/
почему http client такой жуткий?

Oleg
26.09.2018
20:04:35
а шо с ним не так?

guga
26.09.2018
20:04:50
ну не с самим клиентом, а скорее с реквест билдером

собирать его с URI который собирать из строки

короче квери параметры делать через StringBuilder#append

выглядит как-то дико, с пол пинка не нашел ничего лучше, даже в гугл залез

Я конечно понимаю, что это штука просто для посылания реквестов и получения респонсов, но могли бы и нормальные реквест билдеры завезти

Artjom
26.09.2018
20:07:27
попытался один микросервис перевести на 10 у нас в поме используется docker-maven от спотифай, и с ним какие-то косяки в 11

вообще не сложилось по легкому перевести - полчаса посидел забил

Timur
26.09.2018
20:10:07
как то я с микросервисами выпал из java мира по 8ки и 9ки, что в 10тке то было?

Timur
26.09.2018
20:27:32
var
Тю ?

Bogdan
26.09.2018
20:28:19
Тю ?
ну там еще что-то внутренее было, но вроде поламать ничего не должно

Timur
26.09.2018
20:29:00
Валхалу ещё не выложили?

Евгений
26.09.2018
21:38:59


Oleg
26.09.2018
21:41:05
ну там еще что-то внутренее было, но вроде поламать ничего не должно
всего-то выбросили JavaEE, JavaFx, Nashorn и Корбу, а так ничего не должны были в 11 поломать)

Google
Евгений
26.09.2018
21:41:27
олег почему у меня джава не работает? :(

Евгений
26.09.2018
21:41:43
оО

ну лан

Alexey
26.09.2018
21:42:28
Это вдохновило меня на новое слово: CannotThrowExceptionError

Artjom
26.09.2018
21:42:52
Alexey
26.09.2018
21:43:13
А по теме, что это за исключение такое? Его Javac кидает?

Евгений
26.09.2018
21:43:22
да

Страница 2830 из 2890