Автор оригинала: Pankaj Kumar.
Была выпущена Java 9, и в ней произошло много изменений. Сегодня мы рассмотрим частные методы Java 9 в изменении интерфейсов.
Java 9 Частные методы в интерфейсах
В последних выпусках java произошло много изменений в интерфейсах. Несколько дней назад я написал обширный пост о функциях Java 9 . Мы рассмотрим следующие разделы в этом посте.
- Интерфейс Java 7
- Изменения интерфейса Java 8
- Изменения интерфейса Java 9
- Правила для определения частных методов в интерфейсе?
- Зачем нам нужны частные методы в интерфейсе?
- Вопросы И Ответы Для Интервью
В этом посте я предоставил псевдокод только для понимания этой новой функции, потому что все знают, что такое интерфейс в java и что такое частный метод в Java .
Интерфейс Java 7
В Java SE 7 или более ранних версиях интерфейс может иметь только два вида функций.
- Постоянные переменные
- Абстрактные методы
Мы не смогли предоставить реализации методов в интерфейсах. Если мы хотим обеспечить комбинацию абстрактных методов и неабстрактных методов (методов с реализацией), мы должны были использовать только абстрактный класс.
public interface DBLogging{
String MONGO_DB_NAME = "ABC_Mongo_Datastore";
String NEO4J_DB_NAME = "ABC_Neo4J_Datastore";
String CASSANDRA_DB_NAME = "ABC_Cassandra_Datastore";
void logInfo(String message);
void logWarn(String message);
void logError(String message);
void logFatal(String message);
}
Здесь мы определили пару констант и общедоступные абстрактные методы. Что делать, если я хотел бы предоставить некоторую реализацию этих методов здесь, скажем, реализацию по умолчанию. Затем мы должны перейти к абстрактному классу в Java 7 или более ранних версиях.
Изменения интерфейса Java 8
Корпорация Oracle представила некоторые новые функции для интерфейса в выпуске Java 8. Это Методы по умолчанию и Статические методы функция.
Да, мы можем писать реализации методов в интерфейсе начиная с Java 8 и далее. Нам нужно использовать ключевое слово по умолчанию , чтобы определить их, как показано ниже.
В Java 8 интерфейс может содержать только четыре вида вещей:
- Постоянные переменные
- Абстрактные методы
- Методы по умолчанию
- Статические методы
В изменениях интерфейса Java 8 были добавлены методы по умолчанию и статические методы .
public interface DBLogging{
String MONGO_DB_NAME = "ABC_Mongo_Datastore";
String NEO4J_DB_NAME = "ABC_Neo4J_Datastore";
String CASSANDRA_DB_NAME = "ABC_Cassandra_Datastore";
// abstract method example
void logInfo(String message);
// default method example
default void logWarn(String message){
// Step 1: Connect to DataStore
// Step 2: Log Warn Message
// Step 3: Close the DataStore connection
}
default void logError(String message){
// Step 1: Connect to DataStore
// Step 2: Log Error Message
// Step 3: Close the DataStore connection
}
default void logFatal(String message){
// Step 1: Connect to DataStore
// Step 2: Log Fatal Message
// Step 3: Close the DataStore connection
}
// static method example
static boolean isNull(String str) {
System.out.println("Interface Null Check");
return str == null ? true : "".equals(str) ? true : false;
}
// Any other abstract, default, static methods
}
Приведенный выше пример показывает все, что мы можем сделать в интерфейсах Java 8, обратите внимание на дополнительный набор стандартных и статических методов.
Вы заметили избыточность кода во всех методах ведения журнала? Каждый метод открывает и закрывает соединение самостоятельно. Если мы хотим повторного использования кода, то нам придется перенести этот общий код в общедоступный метод, но тогда он будет доступен для всех других классов.
Что делать, если мы хотим повторно использовать код, но также не хотим раскрывать его другим? Нам придется перейти к абстрактному классу с частным методом для общего кода.
Изменения интерфейса Java 9
Чтобы обеспечить разрешение вышеуказанных сценариев, корпорация Oracle представила частные методы в интерфейсах в выпуске Java 9.
Начиная с Java 9 и далее, мы можем писать частные методы в интерфейсах, используя модификатор private access, как показано ниже (как и другие частные методы).
В Java 9 и более поздних версиях интерфейс может иметь шесть видов функций:
- Постоянные переменные
- Абстрактные методы
- Методы по умолчанию
- Статические методы
- Частные методы
- Частные статические методы
Частные методы и частные статические методы добавляются в изменения интерфейса Java 9.
public interface DBLogging {
String MONGO_DB_NAME = "ABC_Mongo_Datastore";
String NEO4J_DB_NAME = "ABC_Neo4J_Datastore";
String CASSANDRA_DB_NAME = "ABC_Cassandra_Datastore";
default void logInfo(String message) {
log(message, "INFO");
}
default void logWarn(String message) {
log(message, "WARN");
}
default void logError(String message) {
log(message, "ERROR");
}
default void logFatal(String message) {
log(message, "FATAL");
}
private void log(String message, String msgPrefix) {
// Step 1: Connect to DataStore
// Step 2: Log Message with Prefix and styles etc.
// Step 3: Close the DataStore connection
}
// Any other abstract, static, default methods
}
Здесь мы переместили избыточный код в общий закрытый метод, чтобы наши клиенты API не могли их видеть. Обратите внимание на изображение ниже из Eclipse Oxygen, поддерживающее Java 9.
Правила для определения частных методов в интерфейсе?
При написании частных методов в интерфейсе мы должны следовать этим правилам:
- Мы должны использовать модификатор private для определения этих методов.
- Никаких частных и абстрактных модификаторов вместе, это приведет к ошибке компилятора.
- “Частный” метод означает полностью реализованный метод, поскольку подклассы не могут наследовать и переопределять этот метод.
- “Абстрактный” метод означает метод без реализации. Здесь подклассы должны наследовать и переопределять этот метод.
- Частные методы должны содержать тело.
- Не меньшая доступность, чем у частного модификатора.
Это не новое правило. Мы не можем использовать комбинацию частных и абстрактных модификаторов, потому что оба имеют разные значения.
Вот почему частные методы должны иметь полную реализацию.
В Java, как мы знаем, private является наименее заметным модификатором доступа. Таким образом, мы не можем уменьшить его видимость с частного на любой другой модификатор.
Эти частные методы интерфейса полезны или доступны только в пределах этого интерфейса. Мы не можем получить доступ или наследовать частные методы от интерфейса к другому интерфейсу или классу.
Зачем нам нужны частные методы в интерфейсе?
Частные методы Java 9 в интерфейсах имеют следующие преимущества.
- Нет необходимости писать дублированный код, следовательно, больше возможности повторного использования кода.
- У нас был выбор предоставить клиентам только наши предполагаемые реализации методов.
Это все о частных методах Java 9 в изменении интерфейсов.