English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Tutoriais Básicos de Java

Controle de fluxo do Java

Java Array

Java Orientação a Objetos (I)

Java Orientação a Objetos (II)

Java Orientação a Objetos (III)

Tratamento de Exceções Java

Java Lista (List)

Java Fila (Queue)

Java Conjunto Map

Java Conjunto Set

Java Entrada e Saída (I/)

Reader do Java/Writer

Outros tópicos do Java

Java 9 Métodos de interface privados

Java 9 Novas funcionalidades

Em Java 8Antes, as interfaces podiam ter variáveis constantes e métodos abstratos.

Não podemos fornecer implementação de métodos em uma interface. Se precisarmos fornecer uma combinação de métodos abstratos e não abstratos (métodos com implementação), devemos usar uma classe abstrata.

public class Tester {
   public static void main(String []args) {
      LogOracle log = new LogOracle();
      log.logInfo("");
      log.logWarn("");
      log.logError("");
      log.logFatal("");
      LogMySql log1 = new LogMySql();
      log1.logInfo("");
      log1.logWarn("");
      log1.logError("");
      log1.logFatal("");
   }
}
final class LogOracle implements Logging {
   @Override
   public void logInfo(String message) {
      getConnection();
      System.out.println("Mensagem de Log: " + "INFO");
      closeConnection();
   }
   @Override
   public void logWarn(String message) {
      getConnection();
      System.out.println("Mensagem de Log: " + "WARN");
      closeConnection();
   }
   @Override
   public void logError(String message) {
      getConnection();
      System.out.println("Mensagem de Log: " + "ERROR");
      closeConnection();
   }
   @Override
   public void logFatal(String message) {
      getConnection();
      System.out.println("Mensagem de Log: " + "FATAL");
      closeConnection();
   }
   @Override
   public void getConnection() {
      System.out.println("Abrir conexão de banco de dados");
   }
   @Override
   public void closeConnection() {
      System.out.println("Fechar conexão de banco de dados");
   }
}
final class LogMySql implements Logging {
   @Override
   public void logInfo(String message) {
      getConnection();
      System.out.println("Mensagem de Log: " + "INFO");
      closeConnection();
   }
   @Override
   public void logWarn(String message) {
      getConnection();
      System.out.println("Mensagem de Log: " + "WARN");
      closeConnection();
   }
   @Override
   public void logError(String message) {
      getConnection();
      System.out.println("Mensagem de Log: " + "ERROR");
      closeConnection();
   }
   @Override
   public void logFatal(String message) {
      getConnection();
      System.out.println("Mensagem de Log: " + "FATAL");
      closeConnection();
   }
   @Override
   public void getConnection() {
      System.out.println("Abrir conexão de banco de dados");
   }
   @Override
   public void closeConnection() {
      System.out.println("Fechar conexão de banco de dados");
   }
}
interface Logging {
   String ORACLE = "Oracle_Database";
   String MYSQL = "MySql_Database";
 
   void logInfo(String message);
   void logWarn(String message);
   void logError(String message);
   void logFatal(String message);
 
   void getConnection();
   void closeConnection();
}

O resultado de execução do exemplo acima é:

Abrir conexão de banco de dados
Mensagem de log: INFO
Fechar conexão de banco de dados
Abrir conexão de banco de dados
Mensagem de log: WARN
Fechar conexão de banco de dados
Abrir conexão de banco de dados
Mensagem de log: ERROR
Fechar conexão de banco de dados
Abrir conexão de banco de dados
Mensagem de log: FATAL
Fechar conexão de banco de dados

No exemplo acima, cada método de log tem sua própria implementação.

Em Java 8 A interface introduziu novas funcionalidades - métodos padrão e métodos estáticos. Podemos usar o Java SE 8A implementação dos métodos deve ser feita no arquivo de interface, usando apenas a palavra-chave default para defini-los.

Em Java 8 Em Java, uma interface pode definir os seguintes tipos de variáveis:/Método:

  • Constante

  • Método abstrato

  • Método padrão

  • Método estático

public class Tester {
   public static void main(String []args) {
      LogOracle log = new LogOracle();
      log.logInfo("");
      log.logWarn("");
      log.logError("");
      log.logFatal("");
      
      LogMySql log1 = new LogMySql();
      log1.logInfo("");
      log1.logWarn("");
      log1.logError("");
      log1.logFatal("");
   }
}
final class LogOracle implements Logging { 
}
final class LogMySql implements Logging { 
}
interface Logging {
   String ORACLE = "Oracle_Database";
   String MYSQL = "MySql_Database";
 
   void default logInfo(String message) {
      getConnection();
      System.out.println("Mensagem de Log: " + "INFO");
      closeConnection();
   }
   void default logWarn(String message) {
      getConnection();
      System.out.println("Mensagem de Log: " + "WARN");
      closeConnection();
   }
   void default logError(String message) {
      getConnection();
      System.out.println("Mensagem de Log: " + "ERROR");
      closeConnection();
   }
   void logFatal(String message) {
      getConnection();
      System.out.println("Mensagem de Log: " + "FATAL");
      closeConnection();
   }
   static void getConnection() {
      System.out.println("Abrir conexão de banco de dados");
   }
   static void closeConnection() {
      System.out.println("Fechar conexão de banco de dados");
   }
}

O resultado de execução do exemplo acima é:

Abrir conexão de banco de dados
Mensagem de log: INFO
Fechar conexão de banco de dados
Abrir conexão de banco de dados
Mensagem de log: WARN
Fechar conexão de banco de dados
Abrir conexão de banco de dados
Mensagem de log: ERROR
Fechar conexão de banco de dados
Abrir conexão de banco de dados
Mensagem de log: FATAL
Fechar conexão de banco de dados

Java 9 Além do Java 8 Além de suportar métodos padrão de interface, também suporta métodos privados.

Em Java 9 Em Java, uma interface pode definir os seguintes tipos de variáveis:/Método:

  • Constante

  • Método abstrato

  • Método padrão

  • Método estático

  • Método privado

  • Método privado estático

A seguir, um exemplo que extraiu redundância para métodos genéricos, parece claramente mais conciso:

public class Tester {
   public static void main(String []args) {
      LogOracle log = new LogOracle();
      log.logInfo("");
      log.logWarn("");
      log.logError("");
      log.logFatal("");
      
      LogMySql log1 = new LogMySql();
      log1.logInfo("");
      log1.logWarn("");
      log1.logError("");
      log1.logFatal("");
   }
}
final class LogOracle implements Logging { 
}
final class LogMySql implements Logging { 
}
interface Logging {
   String ORACLE = "Oracle_Database";
   String MYSQL = "MySql_Database";
 
   private void log(String message, String prefix) {
      getConnection();
      System.out.println("Mensagem de Log: " + prefix);
      closeConnection();
   }
   void default logInfo(String message) {
      log(message, "INFO");
   }
   void default logWarn(String message) {
      log(message, "WARN");
   }
   void default logError(String message) {
      log(message, "ERROR");
   }
   void logFatal(String message) {
      log(message, "FATAL");
   }
   private static void getConnection() {
      System.out.println("Abrir conexão de banco de dados");
   }
   private static void closeConnection() {
      System.out.println("Fechar conexão de banco de dados");
   }
}

O resultado de execução do exemplo acima é:

Abrir conexão de banco de dados
Mensagem de log: INFO
Fechar conexão de banco de dados
Abrir conexão de banco de dados
Mensagem de log: WARN
Fechar conexão de banco de dados
Abrir conexão de banco de dados
Mensagem de log: ERROR
Fechar conexão de banco de dados
Abrir conexão de banco de dados
Mensagem de log: FATAL
Fechar conexão de banco de dados

Java 9 Novas funcionalidades