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

Во-первых, я согласен с ответом от Чешского ♦, но я бы даже пойти дальше и рекомендуем вам создать Enum, который держит ваши имена месяц , Вот как я это сделаю:

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()); 
    } 
} 
Смежные вопросы