Pregunta

Tengo una enumeración que es privada, por no estar expuesto fuera de la clase. ¿Hay alguna forma de hacer una importación estática de ese tipo, por lo que no tengo que escribir la enumeración de escribir cada vez? ¿O hay una mejor manera de escribir esto? Ejemplo:

package kip.test;

import static kip.test.Test.MyEnum.*; //compile error

public class Test
{
  private static enum MyEnum { DOG, CAT }

  public static void main (String [] args)
  {
    MyEnum dog = MyEnum.DOG; //this works but I don't want to type "MyEnum"
    MyEnum cat = CAT; //compile error, but this is what I want to do
  }
}
¿Fue útil?

Solución

  

O hay una mejor manera de escribir esto?

Si sus principales objetivos son hacer referencia a los artículos sin su identificador enumeración de clasificación, y mantener esta lista privada, que podría descartar el tipo enum por completo y utiliza constantes estáticas privadas ordinarias.

Otros consejos

Puede utilizar el nivel de acceso sin modificador, es decir.

enum MyEnum { DOG, CAT }

MyEnum no será visible a clases de otros paquetes ni de cualquier subclase. Es la forma más cercana de lo privado, sin embargo, lo que le permite evitar MyEnum referencia de forma explícita.

Teniendo en cuenta que se puede acceder al campo completo, diría que se trata de un error en el (especificación o lenguaje) compilador que no se puede importar de forma estática.

Le sugiero que haga la enumeración paquete protegido.

Se pueden (o no pueden) ser razonable para mover una parte del código en los métodos (estática) de la enumeración.

Si se pulsa, se podría duplicar los campos estáticos de la clase externa.

private static final MyEnum CAT = MyEnum.CAT;
private static final MyEnum DOG = MyEnum.DOG;

Icky, sino una posibilidad.

No, eso es más o menos lo private se trata.

Usted simplemente puede escribir el código dentro de la propia enumeración.

public enum MyEnum {
DOG, CAT;
public static void main(String[] args) {
    MyEnum dog = MyEnum.DOG; // this works but I don't want to have to type
                                // MyEnum
    MyEnum cat = CAT; // compile error, but this is what I want to do
}
 }

El otro lugar donde enumeraciones privados pueden ser referencias sin su clase está en una sentencia switch:

private static enum MyEnum {
    DOG, CAT
}

public static void main(String[] args) {
    MyEnum e = null;
    switch (e) {
    case DOG:
    case CAT:
    }
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top