2011-01-11 13 views
26

Powiedz, że mam enum public enum Day { MONDAY, TUESDAY, ..., SUNDAY }, a następnie tworzę instancję tablicy dni Day[] days = Day[3];.Domyślna lub początkowa wartość tablicy enum java

Jak ustawić wartość domyślną dla wszystkich dni w days? Jeśli ustawione tak jak powyżej, wszystkie elementy day są puste. Chcę przez enum zachowywać się bardziej jak ints i Strings, które inicjują odpowiednio do 0 i "".

+1

Jestem pewien, że java ma, jak to nazywacie, tworzenie pętli. – Yehonatan

+10

Ciągi nie mają wartości domyślnej "". Podobnie jak wszystkie obiekty, domyślnie mają wartość null. –

+0

i odpowiedzi potwierdzają moje początkowe uczucia! wieśniak! – Yehonatan

Odpowiedz

62

Jak już powiedzieli inni, wyliczenia są typami referencyjnymi - są po prostu kompilatorem cukru syntaktycznego dla określonych klas. JVM nie ma o nich żadnej wiedzy. Oznacza to, że domyślną wartością dla typu jest null. Nie dotyczy to oczywiście tylko tablic - oznacza to, że wartość początkowa dowolnego pola, którego typ jest wyliczeniem, jest również zerowa.

Jednak nie masz do pętli okrągłej siebie, aby wypełnić tablicę, ponieważ nie jest to metoda biblioteki pomóc:

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

nie wiem, że istnieje jakaś wydajność korzyść tego, ale tworzy prostszy kod.

+0

Dook jest prostszy. Ale nie ma korzyści z wydajności. Po prostu robi: dla (int i = 0, len = a.length; i bvdb

1

Java nie zrobi tego domyślnie. Trzeba wyraźnie wypełnić tablicę:

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

enum To jak zajęcia są inicjowane null. Podobnie jak klasy, musisz ustawić wartość w każdej pozycji za pomocą pętli.

0

Jedynym sposobem wiem, jak robi to byłoby tylko pętli tablicy i ustawić każdy do poniedziałku lub 0.

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

i jego też dobrą rzeczą, aby umieścić poniedziałek = 0 w enum więc wiesz, co otrzymasz z wartości, gdy je rzucasz.

5

Można utworzyć tablicę wypełniane wartościami:

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

Alternatywnie, można utworzyć statyczną metodę w wyliczenia, aby powrócić tablicę wartości domyślne:

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

przez spojrzenie , Java enum konstrukcja wygląda zwodniczo proste. Ale w rzeczywistości Java enum jest pełnoprawną klasą, która jest odpowiednio potężna i bogata.

Możesz dodać zagnieżdżone enum Type do Days, aby ustalić, który typ instancji Days jest domyślny.

/** 
* 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 + '}'; 
    } 
}