2017-02-14 2 views
1

내 클래스에는 배열이 멤버 중 하나로 있습니다. 생성자 내부에서 다음 멤버를 채 웁니다. 내가 어떻게 그럴 수 있니, 그것은 나에게 오류를 준다.선언 다음에 배열 멤버 채우기

public class GetCurrentMonth { 

    Calendar now; 
    String[] monthNames; 

    /** 
    * 
    */ 
    public GetCurrentMonth() { 
     now = Calendar.getInstance(); 
     monthNames = {"January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"}; 
    } 

    public String getMonth() 
    { 
     return monthNames[(now.get(Calendar.MONTH) + 1)]; 
    } 
} 

나는 다음과 같이 내가 좋은 코딩 관행을 따를 필요가 있기 때문에, 생성자에서이 달의 이름을 추가하고 싶지 않아, 나는 모든 초기화는 생성자 내부에서 수행해야한다는 말을 들었다.

String[] monthNames = {"January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"}; 

답변

3

당신은, 그것은 나쁜 연습 때문에, 실제로입니다뿐만 아니라 그것은 생성자에서 초기화 하지 좋은 방법이며, []

monthNames = new String[] {"January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"}; 
4

첫째로 새로운 문자열과 배열을 만들 필요가 :

  • 실제로 생성자를 코딩해야합니다 (쓸모없는 코드 추가)
  • 필드가 달처럼, 모든 인스턴스에 대해 동일한이라면 static final을해야
  • 인스턴스 필드해야 final 가능하고 그들에게

모범 사례를 초기화하는 유일한 방법이 있다면 선언에 초기화된다,

public class GetCurrentMonth { 
    private static final String[] MONTH_NAMES = {"January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"}; 
    private final Calendar now = Calendar.getInstance(); 

    public String getMonth() { 
     return MONTH_NAMES [(now.get(Calendar.MONTH) + 1)]; 
    } 
} 
0

첫째, 보헤미안 ♦의 대답에 동의하지만 더욱 가서 당신이 당신의 월 이름을 유지하는 열거를 만드는 것이 좋습니다 것입니다 : 명명 표준을 준수를 포함하여 클래스는 다음과 같이해야한다고 말했습니다 . 다음과 같이 할 수 있습니다.

public enum Month { 
    JANUARY("January"), 
    FEBRUARY("February"), 
    MARCH("March"), 
    APRIL("April"), 
    MAY("May"), 
    JUNE("June"), 
    JYLY("July"), 
    AUGUST("August"), 
    SEPTEMBER("September"), 
    OCTOBER("October"), 
    NOVEMBER("November"), 
    DECEMBER("December"); 

    private String displayName; 

    private Month(String displayName) { 
     this.displayName = displayName; 
    } 

    @Override 
    public String toString() { 
     return displayName; 
    } 

    public static Month valueOfIgnoreCase(String value) { 
     return valueOf(value.toUpperCase()); 
    } 
}