2011-01-11 3 views
26

열거 형 public enum Day { MONDAY, TUESDAY, ..., SUNDAY }이 있다고 가정하면 Day[] days = Day[3]; 일 배열을 인스턴스화합니다.java 열거 형 배열의 기본값 또는 초기 값

모든 날 (예 : MONDAY)의 기본값을 days으로하려면 어떻게합니까? 위와 같이 설정하면 day의 모든 요소는 null입니다. enum에 의해 int와 String처럼 동작하도록하고 싶습니다. int와 String은 각각 0과 ""로 초기화됩니다.

+1

나는 자바가 무엇인지, 루핑 구문이라고 확신한다. – Yehonatan

+10

문자열은 기본적으로 ""가 아닙니다. 모든 객체와 마찬가지로 기본값은 null입니다. –

+0

그리고 대답은 나의 초기 내장 감정을 증명합니다! 야후! – Yehonatan

답변

62

다른 사람들도 말했듯이 enum은 참조 유형입니다.이 클래스는 특정 클래스에 대한 컴파일러 문법적인 설탕 일뿐입니다. JVM에는 이들에 대한 지식이 없습니다. 이는 해당 유형의 기본값이 null임을 의미합니다. 물론 이것은 배열에만 영향을 미치지 않습니다. 즉, 형식이 enum 인 모든 필드의 초기 값 또한 null입니다.

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

나는이 모든 성능 효과가 있다는 것을 모르는 : 도움이되는 라이브러리 방법 거기로

그러나, 당신은 배열을 채우기 위해 자신 라운드 루프가없는 그러나 더 간단한 코드를 만듭니다. 당신은 값으로 채워 배열 생성 할 수 있습니다

+0

dook 간단합니다. 그러나 성능상의 이점은 없습니다. 그것은 단지 : for (int i = 0, len = a.length; i bvdb

1

Java는 기본적으로이 작업을 수행하지 않습니다. 배열을 명시 적으로 채워야합니다.

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

열거 형 클래스는 null으로 초기화됩니다. 클래스와 마찬가지로 루프를 사용하여 각 위치에 값을 설정해야합니다.

0

나는 배열을 통해 단지 루프하고 당신의 열거 월요일 = 0을 넣어 0

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

그리고 그 또한 좋은 일 월요일 각을 설정하거나 얼마나 그 일을 알고있는 유일한 방법 그래서 당신은 당신이 캐스팅 할 때 어떤 가치관에서 벗어날 지 알 것입니다.

5

: 또는

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

을 기본 값의 배열을 반환하는 열거의 정적 메서드를 만들 수 있습니다 모양으로

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

을 , Java enum 구조가 현혹 해 보인다. 하지만 사실 Java enum은 충분히 강력하고 풍부한 풍부한 본격적인 클래스입니다.

중첩 된 enum TypeDays에 추가하여 Days 인스턴스 유형이 기본값인지 확인할 수 있습니다.

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