¿Puedo hacer una importación estática de una subclase privado?
-
20-09-2019 - |
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
}
}
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:
}
}