重复的静态字段(数组与字符串)

时间:2011-02-10 10:28:21

标签: java static

我对以下代码有疑问:

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

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

}

编译器抱怨重复变量。我可以删除2个单独的变量,仍然可以通过Settings.WelcomeMessage访问WelcomeMessage吗?我不需要通过Settings.widget [0]访问它?是否可以向WelcomeMessage变量添加另一个变量(例如使用静态哈希表)?

编辑:我知道这段代码看起来不对,但这只是一个例子,因为我想知道为什么编译器认为WelcomeMessage(作为separata变量)与Widgets数组中的变量相同。

3 个答案:

答案 0 :(得分:2)

我会考虑你的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 :(得分:1)

您已将字段标记为公共静态,这意味着您可以通过以下方式访问它们:

Settings.WelcomeMessage

或者如果您在班级中使用静态导入,只需:

WelcomeMessage

你实际上没有在widgets数组中使用这些常量,你刚刚在那里创建了两个新的字符串“WelcomeMessage”和“ByeMessage”

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

不,如果删除WelcomeMessage和ByeMessage常量,则无法以这种方式访问​​它们,您必须通过窗口小部件数组并以下列方式访问它们:

Settings.widgets[0]

答案 2 :(得分:0)

我认为您的意思是使用它:

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