Повторяющееся статическое поле (Array vs String) - PullRequest
1 голос
/ 10 февраля 2011

У меня вопрос по поводу следующего кода:

public Class Settings{
 public static final String WelcomeMessage= "helloworld";
 public static final String ByeMessage= "yo";

public static String[] widgets = {WelcomeMessage,ByeMessage};

}

Компилятор жалуется на дублирующиеся переменные. Могу ли я удалить 2 отдельные переменные и получить доступ к WelcomeMessage с помощью Settings.WelcomeMessage? Мне не нужно получить доступ к нему с помощью Settings.widget [0]? И возможно ли добавить другую переменную в переменную WelcomeMessage (например, используя статическую хеш-таблицу)?

Редактировать: я знаю, что этот код выглядит неправильно, но это всего лишь пример, потому что мне было интересно, почему компилятор считает, что WelcomeMessage (как отдельная переменная) совпадает с переменной в массиве Widgets.

Ответы [ 3 ]

2 голосов
/ 10 февраля 2011

Я бы рассмотрел java-enums в вашем случае:

public enum Settings {
    WelcomeMessage ("helloworld"),
    ByeMessage   ("yo");

    public final String value;

    Settings(String value) {
        this.value = value;
    }
}

Теперь вы можете получить доступ к значениям через Settings.WelcomeMessage.value. Также вы получите список перечислений с Settings.values().

1 голос
/ 10 февраля 2011

Вы пометили поля как открытые статические, что означает, что да, вы сможете получить к ним доступ через:

Settings.WelcomeMessage

или, если вы используете статический импорт в своем классе, просто:

WelcomeMessage

Вы на самом деле не использовали эти константы в массиве виджетов, вы просто создали две новые строки там "WelcomeMessage" и "ByeMessage"

public static String[] widgets = {"WelcomeMessage","ByeMessage"};

Нет, еслиВы удаляете константы WelcomeMessage и ByeMessage, к которым вы не можете получить доступ таким образом, вам нужно пройти через массив виджетов и получить к ним доступ:

Settings.widgets[0]
0 голосов
/ 10 февраля 2011

Я думаю, что вы хотели использовать это вместо:

public Class Settings
{
    public static final String WelcomeMessage= "helloworld";
    public static final String ByeMessage= "yo";

    public static String[] widgets = {WelcomeMessage,ByeMessage};
}

Но это лучше:

public Class Settings
{
    public static String[] widgets = {"WelcomeMessage","ByeMessage"};
}

И да, вы можете получить доступ к WelcomeMessage через Settings.widgets[0].

Редактировать: Упс - да - конечно, вы не можете получить к ним доступ по имени, только индексировать в массив.

Редактировать 2: Если вы сделаете поле защищенным или закрытым и предоставите методы 'getter', тогдадля любых пользовательских классов не имеет значения, как они реализованы:

public Class Settings
{
    private static final String welcomeMessage= "helloworld";
    private static final String byeMessage= "yo";

    public static String getWelcomeMessage()
    {
        return welcomeMessage;
    }

    public static String getByeMessage()
    {
        return byeMessage;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...