我正在为Swing提供学习曲线并正在阅读InputMap和ActionMap.关于Swing的O'Reilly书中所说的关键词ActionMap可以是任意的Object,但按照惯例是Strings.
有没有理由使用除了String?之外的对象?(例如enum)
我认为使用String文字是不好的做法,因为它们可能输入错误而不会产生任何编译错误.所以我猜测将ActionMap键存储为一次static final定义的不可变类变量(例如MyAction.NAME)是一种很好的做法.
编辑:只是为了澄清,当我阅读文档时想到的想法是使用enum而不是String.有理由我应该使用String吗?
我不确定为什么你不直接使用枚举(没有看过 O'Reilly 的书),但在这种情况下,我可能宁愿使用 Enum.toString() 方法,如
MyActions.NAME.toString()
Run Code Online (Sandbox Code Playgroud)
这节省了定义如此多静态变量的开销,如果您希望存储有关状态的更多信息,可以扩展 MyActions 枚举的功能,并且它保证每个枚举都有一个唯一的字符串。所有这些都存在编译时拼写错误。
编辑:Swing 早于 Enum。这是否就是我们方便的包罗万象的答案?查看卡片布局的 api 。如果有一个设计需要枚举,那就是卡片布局(允许循环显示在同一位置的组件列表)。我想在某些用例中,字符串可能是首选(例如,用户添加的材料),但是来吧:大多数时候我将使用它与某种预定义的状态模式。