Загадочная цель констант интерфейса
В Java можно объявлять поля внутри интерфейса, делая их неявно общедоступными, статическими и финал. Это вызвало вопросы среди разработчиков.
Ловушка интерфейса констант
Вопреки ожиданиям, определение констант в интерфейсе считается «антипаттерном константного интерфейса». Как сказано в книге «Эффективная Java» Джошуа Блоха, такая практика излишне раскрывает пользователям детали реализации и препятствует будущим модификациям кода. Кроме того, он привязывает подклассы к константному интерфейсу.
Аномалии платформы
Несмотря на это предупреждение, в стандартной библиотеке Java можно найти несколько константных интерфейсов, например java. io.ObjectStreamConstants. Эти странности не должны служить примерами, а скорее контрастами, которых следует избегать.
Альтернативные подходы
Чтобы предотвратить ловушки, связанные с постоянными интерфейсами, рассмотрите возможность использования специального служебного класса с частные конструкторы и статические конечные поля.
public final class Constants {
private Constants() {}
public static final double PI = 3.14159;
public static final double PLANCK_CONSTANT = 6.62606896e-34;
}
Этот подход сохраняет константы конфиденциальными, но при этом легко доступными посредством статического импорта.
import static Constants.PLANCK_CONSTANT;
import static Constants.PI;
public class Calculations {
public double getReducedPlanckConstant() {
return PLANCK_CONSTANT / (2 * PI);
}
}
Таким образом, хотя константы интерфейса могут показаться интригующими, их следует избегать из-за потенциальных недостатков дизайна. Вместо этого используйте частные классы со статическим финалом, чтобы поддерживать чистую и гибкую кодовую базу.
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3