我对以下代码有疑问:
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数组中的变量相同。
答案 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;
}
}