JavaRush /Blogue Java /Random-PT /10 recursos do Java 8 dos quais você nunca ouviu falar.

10 recursos do Java 8 dos quais você nunca ouviu falar.

Publicado no grupo Random-PT
Lambdas, lambdas, lambdas. Isso é tudo que você ouve quando as pessoas falam sobre Java 8. Mas isso é apenas uma parte. O Java 8 tem muitos recursos novos - algumas classes e idiomas novos e poderosos, e outros apenas coisas que deveriam estar lá desde o início. Eu queria passar para dez novos recursos que considero pequenas joias que definitivamente valem a pena conhecer. É provável que haja pelo menos um ou dois deles que você gostaria de experimentar, então vamos começar! 1) Métodos padrão. Novidade na linguagem Java, agora você pode adicionar corpos de métodos a interfaces ( métodos padrão ). Esses métodos são adicionados incondicionalmente a todas as classes que implementam essas interfaces. Isso lhe dá a oportunidade de adicionar novas funcionalidades às bibliotecas existentes sem quebrar o código antigo. Isso é definitivamente uma vantagem. Por outro lado, confunde seriamente a linha entre a interface, que obriga certas condições a serem seguidas como convenção, e a classe que as segue, como sua implementação privada. Nas mãos (certas) certas, esta pode ser uma maneira elegante de tornar as interfaces mais inteligentes, evitar repetições e estender bibliotecas. Em mãos ruins; em breve veremos métodos em interfaces que chamam isso e o convertem em um tipo concreto. Brrr.... 2) Parando processos. Iniciar um processo adicional é uma das coisas que você faz sem saber que voltará (depurará) para depurá-lo quando o processo (quebrar) (travar) for abortado, (travar) travar ou usar 100% da CPU. A classe Process agora foi equipada com dois novos métodos para ajudá-lo a controlar processos indisciplinados. O primeiro, isAlive() , permite verificar facilmente se um processo está em execução sem ter que esperar por ele. O segundo e mais poderoso (aviso!) É destroyForcably() , que permite (descaradamente) interromper (matar) à força um processo que excedeu seu tempo (de espera ou não) ou que não é mais necessário. 3) Bloqueio carimbado. Agora, algo realmente emocionante. Ninguém gosta de sincronizar código. Esta é uma maneira infalível de diminuir o desempenho do seu aplicativo (especialmente em grande escala) ou pior, fazer com que ele congele. E ainda assim, às vezes você simplesmente não tem escolha. Existem muitos idiomas para sincronizar o acesso multithread a um recurso. Um dos mais preferidos é ReadWriteLock e implementações relacionadas. Este idioma reduz a contenção, permitindo que vários threads usem um recurso enquanto bloqueia apenas os threads que o manipulam. Parece ótimo, mas na prática esse bloqueio é muito lento , especialmente com um grande número de threads de escrita. Isso acabou sendo tão ruim que o Java 8 introduziu um novo RWLock chamado StampedLock . Este bloqueio não é apenas mais rápido, mas também oferece uma API poderosa para bloqueio otimista, onde você pode obter um bloqueio de leitura a um custo baixo, esperando que nenhuma operação escrita ocorra durante seções críticas do código. No final da seção, você pergunta ao bloqueio se a gravação ocorreu durante esse período e, nesse caso, você pode decidir se deseja tentar novamente, escalar o bloqueio ou desistir. Este bloqueio é uma ferramenta poderosa e merece um post sobre si mesmo. Estou vertiginosamente animado com este novo brinquedo. Ótimo! Além disso você pode ler Aqui . 4) Gravadores concorrentes. Esta é outra pequena joia para quem executa aplicativos multithread. Uma nova API simples e eficiente para leitura e gravação de contadores de vários threads. Às vezes, é ainda mais rápido do que usar AtomicIntegers. Muito incrível! 5) Valores opcionais (ou opcionais). Ah, ponteiros nulos, uma dor de cabeça para todos os desenvolvedores Java. Talvez a mais popular de todas as exceções, existe desde tempos muito antigos. Pelo menos desde 1965 . Tomando emprestado de Scala e Haskell, Java 8 tem um novo padrão, chamado Opcional, para agrupar referências que podem ser nulas. Isso não é de forma alguma uma solução mágica que acabará com null, mas sim um meio para os designers de API indicarem no nível do código (em vez da documentação) que um valor nulo pode ser retornado ou passado para o método, e o chamador deve prepare-se para isso. Portanto, isso só funcionará para novas APIs, desde que os chamadores não permitam que a referência escape do wrapper, onde poderia ser desreferenciada de forma insegura. Devo dizer que sou bastante ambivalente em relação a esse recurso. Por um lado, os nulos continuam a ser um grande problema, por isso agradeço tudo o que foi feito para resolvê-lo. Por outro lado, estou bastante cético quanto à possibilidade de isso ter sucesso. Isso ocorre porque o uso do Opcional exige um esforço sustentado de toda a empresa e tem pouco impacto imediato. Sem uma fiscalização forte, é provável que permaneça do lado esquerdo da estrada. Leia mais sobre Opcional . 6) Anote tudo. Outro pequeno avanço na linguagem Java: anotações podem ser adicionadas a quase tudo no seu código. Anteriormente, as anotações só podiam ser adicionadas a coisas como classes ou declarações de métodos. Desde Java 8, anotações podem ser adicionadas a declarações de variáveis ​​e parâmetros, ao converter um valor para um tipo específico, ou até mesmo alocar um novo objeto. Isso faz parte de um esforço concentrado (juntamente com melhorias nas ferramentas e APIs JavaDoc) para tornar a linguagem mais amigável para análises estáticas e ferramentas de medição (como FindBugs). Este é um recurso interessante, mas assim como o InvokeDynamic introduzido no Java 7, seu valor real dependerá do que a sociedade fizer com ele. 7) Operações de estouro. Agora, aqui está um conjunto de métodos, que deveria ter feito parte da biblioteca principal desde o primeiro dia. Meu hobby favorito é depurar overflows numéricos quando os ints excedem 2 ^ 32 e continuar a criar os erros mais desagradáveis ​​​​e inesperados (ou seja, "como diabos estou conseguindo esse valor estranho?"). Novamente, não há soluções mágicas aqui, mas há muitas funções para manipular números que são descartados quando transbordam de uma forma menos indulgente do que seu operador +/* padrão, que transborda incondicionalmente. 8) Percorra o catálogo. Iterar o conteúdo de uma árvore de diretórios tem sido uma daquelas coisas que as pessoas pesquisam no Google (nesse caso, você provavelmente será aconselhado a usar Apache.FileUtils). O Java 8 dá uma nova cara à classe Files com dez novos métodos. Meu favorito é walk() , que cria um thread lento (importante para sistemas de arquivos grandes) para iterar o conteúdo de uma estrutura de diretórios. 9) Forte geração aleatória. Hoje em dia não falta falar sobre a vulnerabilidade de senhas e chaves. A segurança de software é um negócio complexo e sujeito a erros. É por isso que gosto do novo método SecureRandom. getinstanceStrong() , que seleciona automaticamente o gerador aleatório mais forte disponível para a Java Virtual Machine. Isso reduz as chances de você falhar ou ter um gerador fraco, o que tornará as chaves e os valores criptografados mais suscetíveis a hackers. 10. Data.toInstant(). Java 8 introduz uma API completamente nova para datas e horas . Isto é bastante compreensível, uma vez que o existente não é muito bom. Joda tem buscado essencialmente uma API Java para datas e horários há vários anos. No entanto, mesmo com a nova API, um grande problema permanece: há muitos códigos e bibliotecas usando a API antiga. E todos sabemos que eles vieram para ficar. Então o que você vai fazer? Para conseguir isso, o Java 8 fez algo bastante elegante ao adicionar um novo método à classe Date chamado toInstant() que o converte em uma nova API. Isso permite que você salte rapidamente para a nova API, mesmo ao trabalhar com código que usa a API de data antiga (e continuará a fazer isso no futuro próximo).
Comentários
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION