2011-01-11 21 views
26

Digamos que tengo una enumeración public enum Day { MONDAY, TUESDAY, ..., SUNDAY }, luego instancia una matriz de días Day[] days = Day[3];.Valor predeterminado o inicial para una matriz enum de Java

¿Cómo puedo hacer que un día (p. Ej., MONDAY) sea el valor predeterminado para todos los días en days? Si se configura como arriba, todos los elementos de day son nulos. Quiero que enum se comporte más como enteros y cadenas, que se inicializan a 0 y "" respectivamente.

+1

estoy seguro de que java tiene, cómo se llama, construcciones de bucle. – Yehonatan

+10

Las cadenas no son predeterminadas en "". Al igual que todos los objetos, su valor predeterminado es nulo. –

+0

¡y las respuestas prueban mis sentimientos intestinales iniciales! yahoo! – Yehonatan

Respuesta

62

Como han dicho otros, las enumeraciones son tipos de referencia, simplemente son azúcar sintáctico del compilador para clases específicas. La JVM no tiene conocimiento de ellos. Eso significa que el valor predeterminado para el tipo es nulo. Esto no solo afecta a las matrices, por supuesto, significa que el valor inicial de cualquier campo cuyo tipo es una enumeración también es nulo.

Sin embargo, usted no tiene que bucle alrededor de sí mismo para llenar la matriz, ya que hay un método de biblioteca para ayudar:

Day[] days = new Day[3]; 
Arrays.fill(days, Day.MONDAY); 

No sé que hay alguna rendimiento beneficio de este, pero hace un código más simple.

+0

Hace dook más simple. Pero no hay beneficio de rendimiento. Simplemente lo hace: for (int i = 0, len = a.length; i bvdb

1

Java no hará esto por defecto. Usted tiene que llenar de forma explícita la matriz:

final Day DEFAULT_DAY = Day.MONDAY; 
Day[] days = Day[3]; 
for (int i = 0; i<days.length; i++) 
{ 
    days[i] = DEFAULT_DAY; 
} 
5

enumeración de clases como se inicializan a null. Al igual que las clases, debe establecer un valor en cada posición mediante un bucle.

0

La única forma que conozco de hacer eso sería bucle sólo a través de la matriz y configurar cada uno para el lunes o 0.

for (int i = 0; i < days.length; i++) 
{ 
day[i] = Days.Monday 
} 

Y es también una buena cosa para poner Lunes = 0 en su enumeración para que sepa qué int obtendrá de los valores cuando los lanza.

5

Puede crear la matriz poblada con valores:

Day[] days = {Day.MONDAY, Day.MONDAY, Day.MONDAY}; 

Como alternativa, puede crear un método estático en la enumeración para devolver una matriz del valor por defecto:

enum Day { MONDAY, TUESDAY, SUNDAY; 
    public static Day[] arrayOfDefault(int length) { 
     Day[] result = new Day[length]; 
     Arrays.fill(result, MONDAY); 
     return result; 
    } 
} 

Day[] days = Day.arrayOfDefault(3); 
0

Por la mirada , Java enum constructo parece engañosamente simple. Pero, de hecho, Java enum es una clase completa que es suficientemente poderosa y rica.

Puede añadir enumeración anidada Type en Days para determinar qué tipo de instancia es Days defecto.

/** 
* Example of Days enum 
* @author Awan Biru 
*/ 
enum Days { 

    MONDAY("Monday", Type.WEEKDAYS), 
    TUESDAY("Tuesday", Type.WEEKDAYS), 
    WEDNESDAY("Wednesday", Type.WEEKDAYS), 
    THURSDAY("Thursday", Type.WEEKDAYS), 
    FRIDAY("Friday", Type.DEFAULT), 
    SATURDAY("Saturday", Type.WEEKEND), 
    SUNDAY("Sunday", Type.WEEKEND); 

    private final String name; 
    private final Type type; 

    private Days(String nm, Type dt){ 
     name = nm; 
     type = dt; 
    } 

    public static Days getDefaultDay() { 
     return FRIDAY; 
    } 

    private enum Type{ 

     WEEKDAYS(){ 
      @Override 
      public String toString(){ 
       return "Weekdays"; 
      } 
     }, 
     WEEKEND{ 
      @Override 
      public String toString(){ 
       return "Weekend"; 
      } 
     }, 
     DEFAULT{ 
      @Override 
      public String toString(){ 
       return "Default"; 
      } 
     }; 
    } 

    @Override 
    public String toString() { 
     return "Days{" + "name=" + name + ", type=" + type + '}'; 
    } 
} 
Cuestiones relacionadas