Выражения
✅ Если пропустить константу
✅ Исправить это можно, обработав все значения
✅ Более безопасный рефакторинг и меньше скрытых ошибок
#Java #JavaDev
👉 Java Portal
switch в Java 14+ являются исчерпывающими (exhaustive): компилятор проверяет, что обработаны все возможные значения.✅ Если пропустить константу
enum, компиляция завершится ошибкой✅ Исправить это можно, обработав все значения
enum или добавив ветку default✅ Более безопасный рефакторинг и меньше скрытых ошибок
#Java #JavaDev
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
Extension API в JUnit 5 заменяет
✅ Единая модель: реализуете lifecycle-хуки вроде
✅
✅ Extensions компонуются: можно навесить несколько расширений через
Демо-проект на GitHub: https://github.com/mcasari/codingstrain/tree/main/x-posts-examples/junit5-extension-api-demo
#Java #JUnit5
👉 Java Portal
@RunWith, Runner и @Rule из JUnit 4.✅ Единая модель: реализуете lifecycle-хуки вроде
BeforeEachCallback вместо эксклюзивного Runner✅
ParameterResolver инжектит зависимости в тесты, без наследования от базового класса ✅ Extensions компонуются: можно навесить несколько расширений через
@ExtendWith.Демо-проект на GitHub: https://github.com/mcasari/codingstrain/tree/main/x-posts-examples/junit5-extension-api-demo
#Java #JUnit5
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1🔥1
💡 Java: Удаляйте неиспользуемые импорты и переменные для повышения читаемости кода.
Лишние импорты и неиспользуемые переменные создают визуальный шум, усложняют навигацию по коду и затрудняют поддержку. Большинство IDE умеют автоматически находить и удалять такой код.
#Java #CleanCode
👉 Java Portal
Лишние импорты и неиспользуемые переменные создают визуальный шум, усложняют навигацию по коду и затрудняют поддержку. Большинство IDE умеют автоматически находить и удалять такой код.
#Java #CleanCode
Please open Telegram to view this post
VIEW IN TELEGRAM
💡 Java: Используйте default-методы в интерфейсах для сохранения обратной совместимости (начиная с Java 8).
Если добавить новый default-метод в интерфейс, существующие реализации не придётся менять. Они автоматически получат реализацию по умолчанию.
#Java #Interfaces
👉 Java Portal
Если добавить новый default-метод в интерфейс, существующие реализации не придётся менять. Они автоматически получат реализацию по умолчанию.
#Java #Interfaces
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4❤1
Java: По возможности не возвращайте из методов изменяемые внутренние коллекции, чтобы:
Не раскрывать внутреннее состояние объекта, повышая безопасность.
Иметь возможность менять реализацию без риска сломать другие части приложения.
#Java #JavaDev
👉 Java Portal
Не раскрывать внутреннее состояние объекта, повышая безопасность.
Иметь возможность менять реализацию без риска сломать другие части приложения.
#Java #JavaDev
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7
Java: Используйте блоки
👉 Java Portal
try-catch только там, где это действительно необходимо. Не применяйте исключения для управления логикой выполнения программы. #Java #BestPracticesPlease open Telegram to view this post
VIEW IN TELEGRAM
❤4
Java: Не делай поля публичными. Держи их
👉 Java Portal
private и используй геттеры/сеттеры для инкапсуляции. #Java #OOPPlease open Telegram to view this post
VIEW IN TELEGRAM
👍6
💡 Java: Ловите ошибки ещё на этапе компиляции, помечая переопределённые методы аннотацией
👉 Java Portal
@Override. #Java #Annotations// ❌ Опечатка в имени метода — код компилируется,
// но вы НЕ переопределили toString()
public class User {
private final String name;
public User(String name) {
this.name = name;
}
public String toStrng() { // хотели toString()
return name;
}
}
// Баг остаётся незамеченным — println(user)
// не будет использовать ваш метод
// ✅ @Override превращает опечатку в ошибку компиляции
public class User {
private final String name;
public User(String name) {
this.name = name;
}
@Override
public String toString() {
return "User(" + name + ")";
}
}
// @Override
// public String toStrng() { ... }
//
// Ошибка компиляции:
// method does not override or implement a method from a supertype
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
💡 Совет по Java: всегда закрывайте ресурсы вроде
👉 Java Portal
BufferedReader, InputStream и OutputStream через try-with-resources, чтобы избежать утечек памяти и ресурсов. #Java #BestPracticesPlease open Telegram to view this post
VIEW IN TELEGRAM
Java: используйте полиморфизм вместо цепочек
Проверки типов часто приводят к разрастающимся
❌ До:
Каждый новый тип требует правки метода.
✅ После:
Преимущества:
→ нет цепочек
→ меньше условной логики
→ проще расширять систему новыми типами
→ соблюдается принцип Open/Closed
→ поведение находится внутри самого объекта, а не размазано по коду
Добавить новое животное теперь можно без изменения существующей логики:
Клиентский код останется прежним:
Пусть объекты сами решают, как себя вести. Именно для этого и существует полиморфизм. #Java #OOP
👉 Java Portal
instanceof.Проверки типов часто приводят к разрастающимся
if/else, нарушают принцип Open/Closed и заставляют изменять существующий код при добавлении новых сущностей.❌ До:
public String describe(Animal animal) {
if (animal instanceof Dog) {
return "Woof";
} else if (animal instanceof Cat) {
return "Meow";
} else if (animal instanceof Cow) {
return "Moo";
}
throw new IllegalArgumentException("Unknown animal");
}Каждый новый тип требует правки метода.
✅ После:
public interface Animal {
String sound();
}
public final class Dog implements Animal {
public String sound() {
return "Woof";
}
}
public final class Cat implements Animal {
public String sound() {
return "Meow";
}
}
public final class Cow implements Animal {
public String sound() {
return "Moo";
}
}
public String describe(Animal animal) {
return animal.sound();
}Преимущества:
→ нет цепочек
instanceof и приведения типов→ меньше условной логики
→ проще расширять систему новыми типами
→ соблюдается принцип Open/Closed
→ поведение находится внутри самого объекта, а не размазано по коду
Добавить новое животное теперь можно без изменения существующей логики:
public final class Sheep implements Animal {
public String sound() {
return "Baa";
}
}Клиентский код останется прежним:
describe(new Sheep());
Пусть объекты сами решают, как себя вести. Именно для этого и существует полиморфизм. #Java #OOP
Please open Telegram to view this post
VIEW IN TELEGRAM
❤3
Java Tip: Не перегружайте методы параметрами
Если метод принимает слишком много аргументов, возрастает риск передать значения в неправильном порядке, а код становится сложнее читать и поддерживать.
❌ Плохо:
✅ Лучше сгруппировать связанные данные в отдельный объект:
Такой подход:
• делает сигнатуры методов компактнее
• упрощает расширение модели данных
• снижает вероятность ошибок при вызове
• делает код более понятным и самодокументируемым
Если несколько параметров всегда используются вместе — вероятно, им нужен собственный класс или record.
#Java #Refactoring #CleanCode
👉 Java Portal
Если метод принимает слишком много аргументов, возрастает риск передать значения в неправильном порядке, а код становится сложнее читать и поддерживать.
❌ Плохо:
createUser(firstName, lastName, street, city, zip, country);
✅ Лучше сгруппировать связанные данные в отдельный объект:
createUser(firstName, lastName,
new Address(street, city, zip, country));
Такой подход:
• делает сигнатуры методов компактнее
• упрощает расширение модели данных
• снижает вероятность ошибок при вызове
• делает код более понятным и самодокументируемым
Если несколько параметров всегда используются вместе — вероятно, им нужен собственный класс или record.
#Java #Refactoring #CleanCode
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5❤1
Java: Глубокие цепочки вроде
✅
Если
Такой подход читается лучше, чем множество разбросанных
#Java #NullSafety
👉 Java Portal
user → address → city — классическая ловушка для NullPointerException. Вложенные проверки if (x != null) быстро разрастаются, и легко пропустить один из уровней.Optional:findByEmail(email)
.map(User::getAddress)
.map(Address::getCity)
.orElse("unknown");
Если
Optional в API нет, достаточно одной проверки:if (user == null || user.getAddress() == null)
Такой подход читается лучше, чем множество разбросанных
null-проверок, из-за которых сложно понять, какое именно значение может отсутствовать.#Java #NullSafety
Please open Telegram to view this post
VIEW IN TELEGRAM
❤7