Classes e anotações de enumeração Java

Classes e anotações de enumeração Java

Um, classe de enumeração

1. Uso de classes enumeradas

  1. Existe apenas um número limitado de objetos da classe, o que é certo. Chamamos essa classe de classe de enumeração
  2. Quando você precisa definir um conjunto de constantes, é altamente recomendável usar uma classe de enumeração
  3. Se houver apenas um objeto na classe de enumeração, ele pode ser usado como a implementação do modo singleton

2. Como personalizar a classe de enumeração (antes de jdk5.0)

degrau

  1. Declare as propriedades de um objeto de classe de enumeração personalizada: private final

  2. Privatize o construtor da classe e atribua valores às propriedades do objeto

  3. Fornece vários objetos da classe de enumeração atual: public static final

  4. Outras demandas, como: obter as propriedades de objetos de enumeração, método toString, etc.

    class Season {
          
          
    	//1.
        private final String seasonName;
        private final String seasonDesc;
    
        //2.
        private Season(String seasonName, String seasonDesc) {
          
          
            this.seasonName = seasonName;
            this.seasonDesc = seasonDesc;
        }
        
        //3.
        public static final Season SPRING = new Seanson("春天""春暖花开");
        public static final Season SUMMER = new Seanson("夏天""夏日炎炎");
        public static final Season AUTUMN = new Seanson("秋天""秋高气爽");
    	public static final Season WINTER = new Seanson("冬天""冰天雪地");
        
        //4.
        //getters(),toString()等方法
    }
    

3. * Como usar a palavra-chave enum para definir uma classe de enumeração (adicionada após jdk5.0)

  • Classes de enumeração definidas usando a palavra-chave enum,Herdar a classe Enum por padrão

degrau

  1. Forneça os objetos da classe de enumeração atual, vários objetos são separados por vírgulas e, finalmente, terminam com um ponto e vírgula.

  2. Declare as propriedades de um objeto de classe de enumeração personalizada: private final

  3. Fornece vários objetos da classe de enumeração atual: public static final

  4. Outras demandas, como: obter as propriedades de objetos de enumeração, método toString, etc.

    enum Season {
          
          
        //1
        SPRING("春天","春暖花开"),
        SUMMER("夏天","夏日炎炎"),
        AUTUMN("秋天","秋高气爽"),
        WINTER("冬天","冰天雪地");
    
        //2.
        private final String seasonName;
        private final String seasonDesc;
    
        //3.
        private Season(String seasonName, String seasonDesc) {
          
          
            this.seasonName = seasonName;
            this.seasonDesc = seasonDesc;
        }
        //4.
        //getters(),toString()等方法
        //如获取季节信息
        public String getInfo() {
          
          
            return "Name:" + this.seasonName + "Desc:" + this.seasonDesc;
        }
    }
    
    public class enumTest {
          
          
        @Test
        public void test() {
          
          
            Season spring = Season.SPRING;
            System.out.println(spring.getInfo());
        }
    }//运行结果:Name:春天Desc:春暖花开
    

4. O método principal da classe Enum

Nome do método Descrição detalhada
valor Retorna uma matriz de objetos do tipo de enumeração. Este método pode percorrer facilmente todos os valores de enumeração.
Passe o objeto Class do tipo de enumeração e o nome da constante de enumeração para o método estático valueOf, e você obterá a constante de enumeração que corresponde aos parâmetros.
Obtenha o nome da constante enum atual. (Reescritível para aumentar a legibilidade)
é igual a Os tipos de enumeração podem usar == diretamente para comparar se duas constantes de enumeração são iguais. O método equals da classe Enum é implementado com ==
hashCode Enum implementa hashCode () para ser consistente com igual. Ele também é imutável.
getDeclaringClass Obtenha o objeto Class do tipo enum ao qual a constante enum pertence. Você pode usá-lo para determinar se duas constantes de enumeração pertencem ao mesmo tipo de enumeração.
nome Obtenha o nome da constante enum atual. Recomenda-se usar toString () primeiro
ordinal Obtenha a ordem da constante enum atual
comparado a Os tipos de enumeração implementam a interface Comparable. O tamanho dos dois tipos de enumeração pode ser comparado (organizado na ordem da declaração)
clone Os tipos de enumeração não podem ser clonados. Para evitar que as subclasses implementem o método clone, Enum implementa um clone invariável () que lança apenas CloneNotSupportedException.

5. Use a palavra-chave enum para implementar a classe de enumeração da interface

  1. Caso 1: implemente a interface e implemente o método abstrato na classe enum

    import org.junit.Test;
    import java.util.Arrays;
    import java.util.Comparator;
    
    public class enumTest {
          
          
        @Test
        public void test() {
          
          
    
        }
    }
    
    interface info {
          
          
        void show();
    }
    
    enum Season implements info{
          
          
    
        SPRING("春天","春暖花开"),
        SUMMER("夏天","夏日炎炎"),
        AUTUMN("秋天","秋高气爽"),
        WINTER("冬天","冰天雪地");
    
        private final String seasonName;
        private final String seasonDesc;
    
        private Season(String seasonName, String seasonDesc) {
          
          
            this.seasonName = seasonName;
            this.seasonDesc = seasonDesc;
        }
    
        @Override
        public void show() {
          
          
            System.out.println("这是Season枚举类");
        }
    }
    
    
    
    
  2. Caso 2: Deixe os objetos da classe de enumeração implementarem os métodos abstratos na interface, respectivamente

    import org.junit.Test;
    import java.util.Arrays;
    import java.util.Comparator;
    
    interface info {
          
          
        void show();
    }
    
    enum Season implements info{
          
          
        SPRING("春天","春暖花开"){
          
          
            @Override
            public void show() {
          
          
                System.out.println("春天在哪里");
            }
        },
        SUMMER("夏天","夏日炎炎"){
          
          
            @Override
            public void show() {
          
          
                System.out.println("宁夏");
            }
        },
        AUTUMN("秋天","秋高气爽"){
          
          
            @Override
            public void show() {
          
          
                System.out.println("秋天不回来");
            }
        },
        WINTER("冬天","冰天雪地"){
          
          
            @Override
            public void show() {
          
          
                System.out.println("大约在冬季");
            }
        };
    
        private final String seasonName;
        private final String seasonDesc;
    
        private Season(String seasonName, String seasonDesc) {
          
          
            this.seasonName = seasonName;
            this.seasonDesc = seasonDesc;
        }
    }
    
    public class enumTest {
          
          
        @Test
        public void test() {
          
          
            Season[] value = Season.values();
            for (int i = 0; i < value.length; i++) {
          
          
                value[i].show();
            }
        }
    }
    

2. Anotação

1. Visão geral da anotação

  1. A partir do JDK 5.0, o Java adicionou suporte para MetaData, que é Annotation
  2. A anotação está realmente no códigoMarca especial, Essas tags podem ser lidas durante a compilação, carregamento de classe e tempo de execução, e o processamento correspondente pode ser executado. Ao usar a Anotação, os programadores podem incorporar algumas informações suplementares no arquivo de origem sem alterar a lógica original. Ferramentas de análise de código, ferramentas de desenvolvimento e ferramentas de implantação podem ser verificadas ou implantadas escrevendo informações suplementares.
  3. A anotação pode ser usada como um modificador. Ela pode ser usada para modificar a declaração de pacotes, classes, construtores, métodos, variáveis ​​de membro, parâmetros e variáveis ​​locais . Essas informações são armazenadas no par "nome = valor" da Anotação.
  4. Em JavaSE, o propósito de usar anotações é relativamente simples, como marcar recursos desatualizados e ignorar avisos. No Java EE / Android, as anotações ocupam um papel mais importante, por exemplo, são usadas para configurar qualquer aspecto do aplicativo, substituindo o código florescente e a configuração XML deixados na versão antiga do JavaEE.
  5. O modelo de desenvolvimento futuro é baseado em anotações. JPA é baseado em anotações. Spring 2.5 e superior são baseados em anotações. Hibernate 3.xe posterior também são baseados em anotações. Agora Struts2 é parcialmente baseado em anotações. Esta tendência pode ser considerada em certa medida: estrutura = anotação + reflexão + padrão de design .

2. Exemplos de anotações comuns

  • Ao usar Anotação, adicione o símbolo @ na frente e use a Anotação como um modificador. Usado para modificar os elementos do programa que suporta.

  • Anotações relacionadas a documentos parcialmente gerados

    @author indica o autor que desenvolveu este tipo de módulo, usado entre vários autores, split @version indica a versão deste tipo de módulo
    @ver direção de referência, ou seja, tópicos relacionados

    @desde de qual versão a descrição
    @param de um parâmetro no método foi adicionada . Se não houver nenhum parâmetro, você não pode escrever a descrição do valor de retorno do método
    @return . Se o tipo de valor de retorno do método for nulo , você não pode escrever
    @exception. O método pode lançar Se o método não usar throws para lançar explicitamente uma exceção, ele não pode ser escrito

    • As três tags @param @return e @exception são usadas apenas para métodos.
    • Requisitos de formato @param: nome do parâmetro @param, tipo de parâmetro, descrição do parâmetro
    • @return format requisitos: @return return value type return value description
    • Requisitos de formato @exception: @exception exception tipo descrição de exceção
    • @param e @exception podem ser múltiplos
  • Verificação de formato em tempo de compilação (três anotações básicas integradas ao JDK)

    • @Override : Limite sobrescrevendo o método da classe pai, esta anotação só pode ser usada para métodos
    • @Deprecated : usado para indicar que o elemento modificado (classe, método, etc.) está desatualizado. Normalmente porque a estrutura modificada é perigosa ou existe uma escolha melhor
    • @SuppressWarnings : Suprimir avisos de compilação
  • Acompanhar dependências do código e realizar a função de substituir arquivos de configuração

3. Anotação personalizada

  1. Consulte a definição de SuppressWarnings
  2. Defina um novo tipo de anotação para usar @interface Palavra-chave
  3. As anotações personalizadas herdam automaticamente a interface java.lang.annotation.Annotation
  4. Variáveis ​​de membro de anotação são declaradas na forma de um método sem parâmetros na definição de anotação. O nome do método e o valor de retorno definem o nome e o tipo do membro. Chamamos isso de parâmetros de configuração. O tipo pode ser apenas uma matriz de oito tipos de dados básicos, tipo String, tipo de classe, tipo de anotação e todos os tipos acima .
  5. Você pode especificar o valor inicial ao definir a variável de membro de Anotação. A palavra-chave padrão pode ser usada para especificar o valor inicial da variável de membro ( recomendado )
  6. Se houver apenas um membro do parâmetro, é recomendado usar o valor do nome do parâmetro
  7. Se a anotação definida contiver parâmetros de configuração, o valor do parâmetro deve ser especificado ao usá-la, a menos que tenha um valor padrão. O formato é "nome do parâmetro = valor do parâmetro". Se houver apenas um membro do parâmetro e o nome for valor, você pode omitir "valor ="
  8. As anotações sem definições de membros são chamadas de tags ;
  9. As anotações que incluem variáveis ​​de membro são chamadas de anotações de metadados
  10. As anotações personalizadas devem ser acompanhadas por um fluxo de processamento de informações anotadas para fazer sentido

4. Meta anotações de espécies JDK

  • A Meta Anotação do JDK é usada para modificar outras definições de Anotação

  • O JDK 5.0 fornece 4 tipos de metanotação padrão, a saber:

    • Retenção : usado apenas para modificar uma definição de Anotação, usado para especificar o ciclo de vida da Anotação, @Rentention contém um membro do tipo RetentionPolicy durante a conversa, ao usar @Rentention, você deve especificar um valor para a variável de membro de valor:

      • RetentionPolicy.SOURCE: válido no arquivo de origem (ou seja, o arquivo de origem é retido) e os comentários desta política são descartados diretamente após a compilação
      • RetentionPolicy.CLASS (comportamento padrão): válido no arquivo de classe (ou seja, retenção de classe), ao executar programas Java, a JVM não reterá comentários, este é o valor padrão
      • RetentionPolicy.RUNTIME: Válido no tempo de execução (ou seja, retido no tempo de execução), ao executar programas Java, a JVM reterá os comentários. O programa pode obter o comentário por meio de reflexão.
    • Destino : usado para especificar quais elementos do programa a anotação modificada pode ser usada para modificar. @Target também contém uma variável de membro chamada valor

      Valor (ElementType) Valor (ElementType)
      CONSTRUTOR Usado para descrever o construtor PACOTE Usado para descrever o pacote
      CAMPO Usado para descrever o domínio PARÂMETRO Usado para descrever parâmetros
      LOCAL_VARIABLE Usado para descrever variáveis ​​locais TIPO Usado para descrever classes, interfaces (incluindo tipos de anotação) ou declarações enum
      MÉTODO Usado para descrever o método
    • Documentado: a anotação modificada por ela será extraída em um documento pela ferramenta javadoc. Por padrão, o javadoc não inclui comentários.

      • A anotação definida como Documentada deve definir o valor de Retenção para RUNTIME
    • Herdado: A Anotação modificada por ela terá herança . Se uma classe usa Annotation modificada por @Inherited, suas subclasses possuem esta anotação.

      • Por exemplo: se você marcar as anotações personalizadas com anotações @Inherited no nível da classe, a subclasse pode herdar as anotações no nível da classe pai
      • Na aplicação real, use menos

5. Use reflexão para obter informações de anotação

6. Novos recursos de anotações no JDK 8

  1. Anotações repetíveis: como
    • Declare @Repeatable em MyAnnotation, o valor do membro é MyAnnotation.class
    • Requisitos: Meta-anotações como Target e Retention of MyAnnotation são iguais a MyAnnotation
  2. Anotação de tipo
    • ElementType.TYPE_PARAMETER: Indica que a anotação pode ser escrita na declaração de declaração da variável de tipo (como: declaração genérica)
    • ElementType.TYPE_USE: indica que a anotação pode ser escrita em qualquer instrução usando o tipo

Acho que você gosta

Origin blog.csdn.net/qq_40463117/article/details/113631142
Recomendado
Clasificación