O Guia Definitivo das Melhores Práticas com Java ― Atualizado para o Java 7, 8 e 9 Desde a publicação anterior de Java Efetivo, após o lançamento da versão 6, o Java mudou radicalmente. Este clássico vencedor do prêmio Jolt foi todo atualizado para aproveitar ao máximo os recursos mais recentes da plataforma e de suas bibliotecas. A diversidade de paradigmas no Java moderno demanda recomendações específicas quanto às melhores práticas, e este livro as disponibiliza.Como nas edições anteriores, cada capítulo de Java Efetivo, Terceira Edição é composto de inúmeros “itens” apresentados como ensaios independentes e curtos quetrazem recomendações específicas, informações sobre as sutilezas da plataforma e exemplos de códigos atualizados.As descrições e explicações completas de cada item esclarecem o que fazer, o que não fazer e o porquê.Esta edição aborda os recursos e as bibliotecas do Java 7, 8 e 9, como as construções de programação funcional, adicionadas às raízes da programação orientada a objetos.Adicionou-se muitos itens novos também, incluindo um capítulo dedicado aos lambdas e às streams. A NOVA EDIÇÃO INCLUI• Interfaces funcionais, expressões lambdas,referências para método e streams• Métodos estáticos e padrões para interfaces• Inferência de tipo, incluindo o operador <> para os tipos genéricos• Anotação @SafeVarargs• Instruções try-with-resources• Recursos das bibliotecas novas, como a interface Optional , a java.time e a facilidade dos métodos de fabricação para as coleções Este livro foi elaborado para ajudá-lo a utilizar de modo efetivo a linguagem e as bibliotecas de programação Java: java.lang, java.util e java.io, e os subpacotesJava, tais como, o java.util.concurrent e o java.util.function. Outras bibliotecas são discutidas eventualmente.Esta obra é composta de 90 Itens, e cada um deles aborda o conhecimento de uma regra. Geralmente, as regras descrevem as práticas consideradas produtivaspelos melhores e mais experientes programadores. Os Itens são agrupados em 11 capítulos, cada qual abrange um aspecto amplo da arquitetura de software. A finalidade da obra não é ser lida do princípio ao fim: cada Item é mais ou menos independente. Os Itens estão amplamente correlacionados; desse modo, você pode facilmente trilhar o próprio caminho através das páginas.Introduziram-se muitos recursos à plataforma desde a publicação da última edição deste livro. A maioria dos Itens desta obra usa de alguma forma essas funcionalidades. A tabela a seguir lhe mostra onde encontrar as principais funcionalidades elencadas: Funcionalidade Itens VersãoLambdas Itens 42–44 Java 8Streams Itens 45–48 Java 8Opcionais Item 55 Java 8Métodos padrões nas interfaces Item 21 Java 8try-with-resources Item 9 Java 7@SafeVarargs Item 32 Java 7Modules Item 15 Java 9.
Author(s): Joshua Bloch
Edition: 3
Publisher: Alta Books
Year: 2019
Language: Portuguese
Tags: Java
Apresentação
Prefácio
Agradecimentos
Introdução
Criar e Destruir Objetos
Item 1: Considere os métodos static factory em vez dos construtores
Item 2: Cogite o uso de um builder quando se deparar com muitos parâmetros no construtor
Item 3: Implemente a propriedade de um singleton com um construtor privado ou um tipo enum
Item 4: Implemente a não instanciação através de construtores privados
Item 5: Dê preferência à injeção de dependência para integrar recursos
Item 6: Evite a criação de objetos desnecessários
Item 7: Elimine referências obsoletas de objetos
Item 8: Evite o uso dos finalizadores e dos cleaners
Item 9: Prefira o uso do try-with-resources ao try-finally
Métodos Comuns para Todos os Objetos
Item 10: Obedeça ao contrato geral ao sobrescrever o equals
Item 11: Sobrescreva sempre o método hashCode ao sobrescrever o método equals
Item 12: Sobrescreva sempre o toString
Item 13: Sobrescreva o clone de modo sensato
Item 14: Pense na possibilidade de implementar a Comparable
Classes e Interfaces
Item 15: Reduza ao mínimo a acessibilidade das classes e de seus membros
Item 16: Use os métodos getters em classes públicas e não os campos públicos
Item 17: Reduza a mutabilidade das classes ao mínimo
Item 18: Prefira a composição à herança
Item 19: Projete e documente as classes para a herança ou a iniba
Item 20: Prefira as interfaces em vez das classes abstratas
Item 21: Projete as interfaces para a posteridade
Item 22: Use as interfaces somente para definir tipos
Item 23: Dê preferência às hierarquias de classes em vez das classes tagged
Item 24: Prefira as classes membro estáticas às não estáticas
Item 25: Limite os arquivos fonte a uma única classe de nível superior
Genéricos
Item 26: Não use tipos brutos
Item 27: Elimine as advertências não verificadas
Item 28: Prefira as listas aos arrays
Item 29: Priorize os tipos genéricos
Item 30: Priorize os métodos genéricos
Item 31: Use os wildcards limitados para aumentar a flexibilidade da API
Item 32: Seja criterioso ao combinar os genéricos com os varargs
Item 33: Pense na possibilidade de usar contêineres heterogêneos typesafe
Enums e Anotações
Item 34: Use enums em vez de constantes int
Item 35: Use os campos de instância em vez dos valores ordinais
Item 36: Use a classe EnumSet em vez dos campos de bits
Item 37: Use EnumMap em vez da indexação ordinal
Item 38: Emule enums extensíveis por meio de interfaces
Item 39: Prefira as anotações aos padrões de nomenclatura
Item 40: Use a anotação Override com frequência
Item 41: Use as interfaces marcadoras para definir tipos
Lambdas e Streams
Item 42: Prefira os lambdas às classes anônimas
Item 43: Dê preferência às referências para métodos em vez dos lambdas
Item 44: Prefira o uso das interfaces funcionais padrão
Item 45: Seja criterioso ao utilizar as streams
Item 46: Dê preferência às funções sem efeitos colaterais nas streams
Item 47: Dê preferência à Collection como um tipo de retorno em vez da Stream
Item 48: Tenha cuidado ao fazer streams paralelas
Métodos
Item 49: Verifique a validade dos parâmetros
Item 50: Faça cópias defensivas quando necessário
Item 51: Projete as assinaturas de método com cuidado
Item 52: Utilize a sobrecarga com critério
Item 53: Use os varargs com sabedoria
Item 54: Retorne coleções ou arrays vazios, em vez de nulos
Item 55: Seja criterioso ao retornar opcionais
Item 56: Escreva comentários de documentação para todos os elementos da API exposta
Programação Geral
Item 57: Minimize o escopo das variáveis locais
Item 58: Dê preferência aos loops for-each em vez dos tradicionais loops for
Item 59: Conheça e utilize as bibliotecas
Item 60: Evite o float e o double caso sejam necessárias respostas exatas
Item 61: Dê preferência aos tipos primitivos em vez dos tipos primitivos empacotados
Item 62: Evite as strings onde outros tipos forem mais adequados
Item 63: Cuidado com o desempenho da concatenação de strings
Item 64: Referencie os objetos através das interfaces deles
Item 65: Dê preferência às interfaces em vez da reflexão
Item 66: Utilize os métodos nativos com sabedoria
Item 67: Seja criterioso ao otimizar
Item 68: Adote as convenções de nomenclatura geralmente aceitas
Exceções
Item 69: Utilize as exceções somente em circunstâncias excepcionais
Item 70: Utilize as exceções verificadas para condições recuperáveis e exceções de runtime para erros de programação
Item 71: Evite o uso desnecessário das exceções verificadas
Item 72: Priorize o uso das exceções padrões
Item 73: Lance exceções adequadas para a abstração
Item 74: Documente todas as exceções lançadas por cada método
Item 75: Inclua as informações a respeito das capturas de falhas nos detalhes da mensagem
Item 76: Empenhe-se para obter a atomicidade de falha
Item 77: Não ignore as exceções
Concorrência
Item 78: Sincronize o acesso aos dados mutáveis compartilhados
Item 79: Evite a sincronização excessiva
Item 80: Dê preferência aos executores, às tarefas e às streams em vez das threads
Item 81: Prefira os utilitários de concorrência ao wait e ao notify
Item 82: Documente a thread safety
Item 83: Utilize a inicialização preguiçosa com parcimônia
Item 84: Não dependa do agendador de threads
Serialização
Item 85: Prefira alternativas à serialização Java
Item 86: Tenha cautela ao implementar a Serializable
Item 87: Pense na possibilidade de usar uma forma serializada customizada
Item 88: Escreva métodos readObject defensivamente
Item 89: Dê preferência aos tipos enum em vez do readResolve para controle de instância
Item 90: Pense em usar proxies de serialização em vez de instâncias serializadas
Itens Correspondentes aos Itens da Segunda Edição
Referências