O que é uma enumeração?
A enumeração é um novo recurso introduzido pelo JDK5. Em alguns casos, um objeto de classe é fixo e pode ser definido como uma enumeração. No uso real, os tipos de enumeração também podem ser usados como especificação para garantir a segurança dos parâmetros do programa. A enumeração tem as seguintes características:
java.lang.Enum em java por padrão e implementa duas interfaces: java.lang.Seriablizable e java.lang.Comparable .public static final e classes de enumeração não abstratadas não podem derivar subclasses. Aqui estão equals() na classe java.lang.Enum :
// Isso é modificado final e as subclasses não têm permissão para reescrever o BOOLEAN Public Final Equals (objeto outro) {return this == outros;} Métodos comuns para enumeração
int compareTo(E o)
Compare a ordem desta enumeração com o objeto especificado. Quando o objeto é menor que, igual ou maior que o objeto especificado, números inteiros negativos, zero ou números inteiros positivos são retornados, respectivamente. As constantes de enumeração só podem ser comparadas com outras constantes de enumeração do mesmo tipo de enumeração.
// código -fonte em enum public final int compareto (e o) {enum outros = (enum) o; Enum self = this; if (self.getClass ()! = Other.getClass () && // otimização self.getDecLaringClass ()! = Other.getDecLaringClass ()) lança new ClassCastException (); return self.ordinal - outro.ordinal;} String name()
Retorna o nome desta instância de enum.
static values()
Retorna uma matriz contendo todos os valores de enumeração que podem ser usados para iterar em todos os valores da enumeração.
String toString()
Retorna o nome desta instância de enum, ou seja, o valor da enumeração. O mesmo que name() .
// name () e tostring () em enum public string tostring () {Nome de retorno;} public final string name () {Nome de return;} int ordinal()
Retorna o valor do índice do valor da enumeração na classe Enum (a partir de 0), ou seja, a ordem do valor da enumeração na declaração de enumeração, que depende da ordem da declaração do valor da enumeração.
<T extends Enum<T>> valueOf()
Retorna uma constante de enumeração do tipo de enumeração especificado com o nome especificado, o nome deve corresponder exatamente ao identificador usado para declarar a constante de enumeração nesse tipo (os caracteres extras de espaço em branco não são permitidos). Esse método corresponde à tostração; portanto, se substituímos toString() , devemos substituir valueOf() (podemos substituir toString() , mas não podemos substituir valueOf() por nós mesmos. Quando anulamos toString() , valueOf() será automaticamente.
Aplicação de enumeração
A enumeração é um tipo especial e seu uso é muito semelhante ao das classes comuns.
Substitua um conjunto de constantes
cor de enum pública {vermelho, verde, em branco, amarelo} Usado em declarações de switch
// o switch adicionou suporte para enum no sinal de enumeração jdk1.6 {verde, amarelo, vermelho} ... switch (cor) {case Red: color = signal.green; quebrar; } ... Adicionar métodos para enum
cor de enumeração pública {vermelha ("vermelha"), verde ("verde"), em branco ("branco"), yello ("amarelo"); // Nome da sequência privada variável do membro; // construtor color privado (nome da string) {this.name = name; } // obtenha o método definido public string getName () {return name; } public void setName (nome da string) {this.name = name; }} Implementar a interface
Comportamento de interface pública {void print (); } A cor pública enum implementa o comportamento {Red ("Red", 1), Green ("Green", 2), Blank ("White", 3), Yello ("Amarelo", 4); // Método da interface @Override public void print () {System.out.println (this.index+":"+this.name); }} Classe de enumeração contendo métodos abstratos
operação pública enum {// usado para executar operações de adição mais {// A parte do aparelho é na verdade uma subclasse interna anônima @Override Public Double Cálculo (duplo x, duplo y) {return x + y; }}, // usado para executar operações de subtração menos {// A parte do aparelho é na verdade uma subclasse interna anônima @Override Public Double Cálculo (duplo x, duplo y) {// TODO Método Auto -Gerado Stub Return X - Y; }}, // usado para executar as operações de multiplicação Times {// A parte do aparelho é na verdade uma subclasse interna anônima @Override Public Double Cálculo (duplo x, duplo y) {return x * y; }}, // usado para executar a operação de divisão Divide {// A parte do aparelho encaracolado é na verdade uma subclasse interna anônima @Override Public Double Calcular (duplo x, duplo y) {return x / y; }}; // Defina um método abstrato para esta classe de enumeração. Todos os valores de enumeração na classe de enumeração devem implementar este método abstrato public duplo calcular (duplo x, duplo y);} Implementando singletons com enumerações (melhores práticas para singletons)
beneficiar:
1.Use os recursos da enumeração para implementar casos únicos
2. A JVM garante a segurança do thread
3. Ataques de serialização e reflexão foram resolvidos por enumeração
public enum singleton {instance; public singleton getInstance () {// Adicione esse método para permitir que outras pessoas entendam como usá -lo, porque esse método de implementação é relativamente raro. instância de retorno; }} Outro uso de enumeração
Enumset
range(E from, E to)
Obtenha uma variedade de conjuntos do valor da enumeração.
para (dia da semana do dia: enumset.Range (semana de semana. }
of(E first, E... rest)
Cria um conjunto de enumeração que originalmente contém os elementos especificados.
noneOf(Class<E> elementType)
Cria um conjunto de enumeração vazio com o tipo de elemento especificado.
Enummap
EnumMap(Class<K> keyType)
Cria um mapa de enumeração vazio com o tipo de chave especificado.
Mapa <clima, string> enummap = new Enummap <Weather, String> (Weather.class); enummap.put (Weather.sunny, "Sunny"); enummap.put (Weather.rainy, "Rainy");
Enumeração no Android
Enum precisa ocupar uma grande quantidade de memória. Se for sensível à memória, tente usar o Enum o mínimo possível e substitua -o por uma constante estática.
No entanto, se você não usar enumeração, alguns riscos de segurança surgirão, portanto o funcionário lançou duas anotações, que podem ser digitadas durante o período de compilação para substituir a enumeração. Essas duas anotações são: @intdef e @Stringdef. Localizado no compile 'com.android.support:support-annotações:+'.
Exemplo de uso
O uso de @StringDef é consistente com @IntDef. Aqui tomamos @Intdef como exemplo.
interface pública qrcodeType {int weChat = 0; int alipay = 1; @Intdef ({WeChat, alipay}) @retention (retentionPolicy.source) @target ({elementType.field, elementType.method, elementType.parameter}) @interface checker {}} public public void setType (@qrcodeType.CHECKER INT TIPO) {// define no parâmetro this.type = type; } @Qrcodetype.checker // define no método (ou seja, verifique o tipo de valor de retorno) public int getType () {return type; }} Recomendações para uso
A faixa mais usada no desenvolvimento é usar enumerações em vez de um conjunto de constantes estáticas. Nesse caso, o método de anotação acima pode ser usado.
Quando uma enumeração também contém outras funções (como: incluindo outros métodos definidos), ela não pode ser substituída.
Resumir
O acima é o conteúdo inteiro deste artigo. Espero que o conteúdo deste artigo seja de ajuda para o seu estudo ou trabalho. Se você tiver alguma dúvida, pode deixar uma mensagem para se comunicar.