Prefácio
Não há dúvida de que o Java 8 é a versão mais importante do Java desde o Java 5 (lançado em 2004). Esta versão contém mais de uma dúzia de novos recursos em idiomas, compiladores, bibliotecas, ferramentas e JVM.
Java 8 é uma versão importante do Java. Algumas pessoas acreditam que, embora esses novos recursos sejam esperados pelos desenvolvedores de Java, isso também exige muito esforço para aprender. Abaixo deste artigo, apresentará a você os detalhes dos novos recursos opcionais, métodos padrão e métodos estáticos no Java 8. Sem mais delongas, vamos dar uma olhada na introdução detalhada.
Opcional
A classe opcional ( java.util.Optional ) é uma classe de contêiner que representa se existe ou não existe um valor. Costumava usar nulo para indicar que um valor não existe. Agora opcional pode expressar melhor esse conceito. E pode evitar exceções nulas de ponteiro.
Métodos comuns:
Optional.of(T t) : cria uma instância opcional.Optional.empty() : cria uma instância opcional vazia.Optional.ofNullable(T t) Se t não for nulo, crie uma instância opcional, caso contrário, crie uma instância vazia.isPresent() : determina se o valor está incluído.orElse(T t) : Retorna o valor se o objeto de chamada contiver um valor, caso contrário, retornará t.orElseGet(Supplier s) : Retorna o valor se o objeto de chamada contiver um valor, caso contrário, retornará o valor obtido por S.map(Function f) Se houver um valor para processá -lo e retornar o processado opcional, caso contrário, ele retorna Optional.empty()flatMap(Function mapper) é semelhante ao mapa, exigindo que o valor de retorno seja opcional.A seguir, é apresentado um parágrafo da ImportNew para nos dizer como usar opcional corretamente. Por exemplo, não escreva assim:
public static string getName (usuário u) {opcional <suser> user> = opcional.ofnullable (u); if (! user.ispresent ()) retornar "desconhecido"; return user.get (). nome;}Essa reescrita não é apenas concisa, mas também a operação é a mesma que a primeira peça de código. Não é nada mais do que usar o método ISpresent para substituir u == null. Essa reescrita não é o uso correto do opcional, vamos reescrever novamente.
public static string getName (user u) {return opcional.ofnullable (u) .map (user-> user.name) .orelse ("desconhecido");}Esta é a maneira correta de usar opcional. Então, de acordo com essa idéia, podemos fazer chamadas de cadeia com paz de espírito, em vez de fazer os julgamentos camadas por camada. Veja um pedaço de código:
public static string getChampionName (Competition Comp) lança ilegalArgumentException {if (comp! = null) {CompleSult resultado = comp.getResult (); if (resultado! = null) {usuário campeão = resultado.getChampion (); if (campeão! = null) {return Champion.getName (); }}} lança nova ilegalArgumentException ("O valor do param comp não está disponível.");} Por várias razões (como: a competição ainda não produziu um campeonato, chamadas anormais para o método, um grande pacote de presentes enterrado na implementação de um determinado método, etc.), não podemos fazer o tempo todo comp.getResult().getChampion().getName() . Outros idiomas como Kotlin fornecem bênçãos do operador no nível de sintaxe: comp?.getResult()?.getChampion()?.getName() Então, o que devemos fazer em Java?
Vamos ver como será esses códigos após o suporte opcional.
public Static String getChampionName (Competition Comp) lança ilegalargumentException {return opcional.ofnullable (comp) .map (c-> c.getResult ()) .map (r-> r.getChampion ().Isso é muito confortável. O charme de opcional é mais do que isso. Opcional também possui alguns usos mágicos, como opcional que podem ser usados para testar a legalidade dos parâmetros.
public void setName (nome da string) lança ilegalArgumentException {this.name = opcional.ofnullable (nome) .Filter (user :: isNameValid) .orelsethrow (()-> novo ilegalargumentException ("inválido nome de usuário");}}O código acima faz referência a ImportNew - Java8 Como usar opcional corretamente.
Métodos padrão e estáticos em interfaces
Métodos estáticos podem ser adicionados à interface Java8, ou métodos padrão podem ser adicionados e os métodos padrão são modificados com o padrão.
Public Interface Fun <t> {padrão void getName () {System.out.println ("Hello World"); } estático void getage () {System.out.println ("Nine"); }}Se uma interface definir um método padrão, uma classe pai de sua classe de implementação define um método com o mesmo nome e lista de parâmetros. Então, quando a classe de implementação é chamada, o método na classe pai é executado.
classe pública testf {public void getName () {System.out.println ("testf"); }} interface pública TESTINTINTERFACE {padrão void getName () {System.out.println ("Hello World"); }} classe pública Teste estende o testf implementa TestInterface {public static void main (string [] args) {test t = new test (); t.getName (); // a saída é testf}}Se uma classe de implementação implementar duas interfaces, se uma interface pai fornecer um método padrão e a outra interface pai também fornecer um método com o mesmo nome e lista de parâmetros (independentemente de o método ser o método padrão), o método deverá ser substituído para resolver o conflito, caso contrário, um erro será relatado.
interface pública TEXINTINTERFACE {padrão void getName () {System.err.println ("Hello World"); }} interface pública TESTInterface1 {void getName ();} classe pública Test1 implementa TestInterface, TESTInterface1 {public void getName () {System.out.println ("tes1f"); }}Resumir
O acima é o conteúdo inteiro deste artigo. Espero que o conteúdo deste artigo tenha certo valor de referência para o estudo ou trabalho de todos. Se você tiver alguma dúvida, pode deixar uma mensagem para se comunicar. Obrigado pelo seu apoio ao wulin.com.