Привет! Меня зовут Диана, и я занимаюсь разработкой с 2013. Здесь пишу просто и понятно про джава бэк
🔥Тот самый курс по многопочке🔥
https://fillthegaps.ru/mt
Комплименты, вопросы, предложения: @utki_letyat
Post #190
3.78K
JA @java_fillthegaps
Showing posts older than #191 · Back to latest

if (obj instanceof String str)можно сразу использовать str как переменную.
MethodHandles.lookup()Создаст класс, который недоступен коду основного приложения.
.defineHiddenClass(…)
Age + x = 15 + 2*x
x = Age - 15record Point(int x,int y){}
record Time(int hours,int min){}
❌ Point p = new Time(1,1);
Записи по факту одинаковые — два целых числа. Но имена разные, поэтому типы между собой несовместимы. У номинальных типов проверки часто происходят на этапе компиляции.Point p = new Time(1,1);
Структурные типы используются в функциональных языках и java script. Они добавляют больше гибкости, но менее управляемы.(String) → IntegerИдею отвергли из-за сложностей реализации и адаптации к существующим библиотекам. Альтернативное решение — лямбда-выражения, представляют похожую функциональность, но с чётко определённым типом:
Function<String,Integer> f =Все структуры в java номинальные. Записи - не исключение. Номинальность была в требованиях для реализации, а в анонсе records называют nominal tuples — номинальные кортежи.
str → str.length();
record Point(int x, int y) {}
Создаются так же, как и другие классы:Point p = new Point(1,2);В чём особенность?
p.x()🔸 toString по умолчанию
p.y()
Point[x=1, y=2]🔸 equals и hashcode по умолчанию
record Point компилируется в public final class Point extends java/lang/RecordВсе остальные функции класса сохраняются:
public Point(int x, int y){
this.x=x;
this.y=y;
}
Он доступен по умолчанию, его можно не писать. Переопределяйте конструктор, если нужно добавить проверку аргументов:public Point(int x, int y){
if (x>100) throw new …
this.x=x;
this.y=y;
}
Для канонического конструктора есть краткая запись. Можно опустить присвоение переменных и оставить только нужные проверки:public Point {
if (x>100) throw new ...
}
Другие конструкторы должны вызывать канонический:public Point(int x) {
this(x,0);
}
Где использовать записи:record UserDTO(long id, String name) {
public UserDTO(User user) {…}
}
3️⃣ Как промежуточные значения в Stream APIrecord MinMax<T>(T min, T max) {}
❗️Правильный ответ на вопрос перед постом: 360: Sealed Classes (Preview)Чем ближе выход java, тем больше статей о новых фичах — records, text blocks, sealed classes и т. д. Многие разработчики грустят:
383: Foreign-Memory Access API (Second Incubator)
384: Records (Second Preview)
<configuration>3️⃣ При компиляции через консоль добавить 2 аргумента
<argLine>--enable-preview</argLine>
</configuration>