Java用于存储预定义字符串集的主要约定是什么?现在我有一个包含我使用的所有字符串的类,但感觉就像是一个更好的方法来做到这一点。
这就是我在my_strings.java类中所做的事情
public final static String s1 = "test";
public final static String s2 = "test2";
...
答案 0 :(得分:9)
您可以使用资源包。在messages.properties
中创建一个名为src
的文件或与所需包对应的子目录,并按以下方式向其中添加字符串。不需要引用。
ClassThatUsesAString.stringName=foo
AnotherClass.stringName=bar
AnotherClass.anotherString=baz
然后您可以按如下方式访问这些字符串:
ResourceBundle rsrc = ResourceBundle.getBundle("messages");
然后:
rsrc.getString(stringName);
例如,如果FooClass
需要字符串quxString
,则添加到messages.properties:
FooClass.quxString=waldo was here
注意缺少报价。现在抓住它:
rsrc.getString("FooClass.quxString");
这不会强制执行类边界,并且只是为了方便而使用类进行命名。
如果字符串紧密相关,则枚举可能更好,可以直接使用,也可以为不同的本地化指定消息名称(即枚举包含“ECONNREFUSED”和“ECONNABORTED”,并且映射到“连接被拒绝”和“连接已中止” “在一个捆绑和”conexiónrechazada“/”Conexiónabortada“在另一个捆绑
Eclipse用户:Eclipse使用Source→Externalize Strings自动执行此操作(但以更复杂的方式)
答案 1 :(得分:1)
有两种方法。如果它们相关,或者它们指定了概念,则可以使用enum
。否则,要走的路是将ResourceBundle
与.properties
文件一起使用。我也会给这些字符串提供合理的名称,而不是s1
或s2
。
答案 2 :(得分:1)
static final
变量实际上是常量,因为它们的值保持不变,之后无法更改。
我认为你的my_strings.java
是一个具体的类,而不是一个接口 - 为什么界面是个坏主意?在Constant Interface Anti-Pattern
建议的方法是通过查看哪些类使用这些常量来确定常量的上下文?
如果单个类使用常量 - 将常量放在该特定类中并将其设为私有。
如果一个常量被多个类使用但它们都以分层方式相互继承,那么将常量放在层次结构中的最顶层类中并使其受到保护。因此,所有儿童课程都可以使用。
如果一个常量被多个类使用,并且它们都没有通过继承层次结构链接,但属于同一个包,那么将常量放在一个与域透视图最相关的类中它是package-private(无访问修饰符)
如果一个常量被多个类使用,并且它们都没有通过继承层次结构链接并且属于多个包,那么将常量放在一个与域透视图最相关的类中并将其设置为公共
最后,一些通用的有用编码约定:
对类名使用驼峰大小写,例如:MyStrings.java
对常量使用大写,并使用下划线'_'
分隔两个单词,例如:DEFAULT_VALUE
答案 3 :(得分:0)
您可以在字符串中使用.properties文件。这样你就可以处理不同的语言,改变对文件的引用。