Java错误:需要常量字符串表达式

6

我有两个Java类:

public abstract class IconNames {
/**
 *
 */
public static final String ButtonFett = java.util.ResourceBundle.getBundle("recources/buttonproperties").getString("fett");
}

并且。
public class EditorPanelActionListener implements ActionListener{
.
.
.
String buttonText = e.getActionCommand();
switch(buttonText)
    {
        case IconNames.ButtonFett: //Error: constant string expression required
            replace(XmlTags.BOLD);
            break;
    }
 .
 .
 .
 }

编辑器面板操作监听器触发了错误信息"需要常量字符串表达式",问题出在哪里呢?
谢谢!

8
简短回答:switch 语句的情况必须是编译时常量。而您的变量只能在运行时评估。 - jlordo
e.getActionCommand()可以返回枚举而不是字符串吗? - rajesh
1个回答

2

您不应混淆程序逻辑和用户界面文本。操作命令是与显示文本不同的属性,仅在未显式设置时默认为显示文本。

public abstract class IconNames {
  public static final String ButtonFett_CMD = "DO-BOLD";
  public static final String ButtonFett_TXT = java.util.ResourceBundle.getBundle("recources/buttonproperties").getString("fett");
}

JButton b=new JButton(IconNames.ButtonFett_TXT);
b.setActionCommand(IconNames.ButtonFett_CMD);

String buttonText = e.getActionCommand();
switch(buttonText)
{
    case IconNames.ButtonFett_CMD: // user language independent
        replace(XmlTags.BOLD);
        break;
}

这适用于 AbstractButton 的子类,其中也包括菜单项。如果您直接处理 Action 实现(我怀疑您的 switch 语句正在处理它们),则应区分 Action.NAMEAction.ACTION_COMMAND_KEY 属性。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接