Инициализировать массив строк внутри перечисления

#java #enums

#java #перечисления

Вопрос:

У меня есть перечисление в Java, и каждый из его элементов перечисления имеет ряд параметров. То, что я пытаюсь сделать, это представить один из этих параметров в виде массива строк, но, похоже, я не могу выполнить правильную инициализацию.

Вот что я пробовал:

 private static enum DialogType {
    ACCCAT("Acccat", new String[] {"acccatid"}, "acccatText", "dlg7Matchcode", "Zutrittsnkategorie", "Text"),

    private String mDialogName;
    private String[] mKeyField;
    private String mTextField;
    private String mSelectFields;
    private String mKeyFieldHeader;
    private String mTextFieldHeader;

    private DialogType(String dialogName, String[] keyField, String textField, String selectFields, String keyFieldHeader, String textFieldHeader) {
        mDialogName = dialogName;
        mKeyField = keyField;
        mTextField = textField;
        mSelectFields = selectFields;
        mKeyFieldHeader = keyFieldHeader;
        mTextFieldHeader = textFieldHeader;
    }
}
  

Однако я получаю массу синтаксических ошибок. Есть идеи?

Ответ №1:

Сделайте так, чтобы

 public  enum DialogType {
    ACCCAT("Acccat", new String[] {"acccatid"}, "acccatText", 
           "dlg7Matchcode", "Zutrittsnkategorie", "Text");
  

И это должно сработать. Обратите внимание на ; в конце ACCAT.
Также перечисление не может быть статичным.

Комментарии:

1. Ах, глупый я, проблема даже не была связана с моим массивом. И мое перечисление является внутренним для тестового класса JUnit, поэтому я не думаю, что static является проблемой. Хотя это может не иметь особого смысла.

Ответ №2:

Это должно сработать — точка с запятой в конце строки ACCCAT

 private static enum DialogType {

    ACCCAT("Acccat", new String[]{"acccatid"}, "acccatText", "dlg7Matchcode", "Zutrittsnkategorie", "Text");
    private String mDialogName;
    private String[] mKeyField;
    private String mTextField;
    private String mSelectFields;
    private String mKeyFieldHeader;
    private String mTextFieldHeader;

    private DialogType(String dialogName, String[] keyField, String textField, String selectFields, String keyFieldHeader, String textFieldHeader) {
        mDialogName = dialogName;
        mKeyField = keyField;
        mTextField = textField;
        mSelectFields = selectFields;
        mKeyFieldHeader = keyFieldHeader;
        mTextFieldHeader = textFieldHeader;
    }
}
  

Ответ №3:

 ACCCAT("Acccat", new String[] {"acccatid"}, "acccatText", "dlg7Matchcode", "Zutrittsnkategorie", "Text");
  

Я думаю, вам просто нужна точка с запятой в конце объявления экземпляра.

Я предполагаю, что перечисление статично, потому что это внутреннее перечисление чего-либо?