2017-02-14 74 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

你需要创建一个新的String数组[]

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()); 
    } 
}