Java 使用具有有限值集的字符串类属性的最有效方法
这个在Android应用程序中是,但这个问题可能也适用于Java/OOP 在我的应用程序中,我有一个类作业,它表示用户要完成的作业。它的属性之一是Java 使用具有有限值集的字符串类属性的最有效方法,java,android,string,oop,Java,Android,String,Oop,这个在Android应用程序中是,但这个问题可能也适用于Java/OOP 在我的应用程序中,我有一个类作业,它表示用户要完成的作业。它的属性之一是状态,它只能有三个值:“待完成”、“挂起”或“完成” 我想将应用程序翻译成其他语言,因此我一直在使用Android的字符串数组资源类型以XML格式存储这些值: <string-array name="jobs_statuses"> <item>To be done</item> <item>
状态
,它只能有三个值:“待完成”、“挂起”或“完成”
我想将应用程序翻译成其他语言,因此我一直在使用Android的字符串数组资源类型以XML格式存储这些值:
<string-array name="jobs_statuses">
<item>To be done</item>
<item>Pending</item>
<item>Completed</item>
</string-array>
我考虑将属性作为int或其他数值类型存储在类中,并在类中声明三个常量,如下所示:
public static final int STATUS_TO_BE_DONE = 1;
public static final int STATUS_PENDING = 2;
这将允许在我的代码中轻松确定给定作业的状态,但是,接下来如何获取字符串值以在UI中使用?我考虑过使用一个单独的getStatusString
方法,可以这样使用:
myJob.getStatus(); // returns 1
myJob.getStatusString(); // returns localised string for 'To be done' status
因此,简而言之,我希望能够:
- 使用此属性进行比较
- 获取此属性的字符串值,该值基于用户的设备语言进行本地化(本地化字符串存储在XML中)
我是否错过了一个显而易见的解决方案
提前谢谢。正如戴夫·牛顿(Dave Newton)所建议的,我会这样做:
enum Status {
TO_BE_DONE(R.string.to_be_done),
PENDING(R.string.pending),
COMPLETED(R.string.completed);
private final int mStringResource;
private Status(final int stringResource) {
mStringResource = stringResource;
}
public String asString(final Context context) {
return context.getString(mStringResource);
}
}
它允许您使用=
进行比较,以及通过asString()
方法获取本地化的字符串 这可能不是你问题标题的确切答案,但如果你正在寻找将你的应用程序翻译成不同语言的简便方法,谷歌确实为此提供了服务我会考虑EnUM(最终仲裁器)和相关的标签(I18N)。我不确定在Android中处理这个问题的最佳方法是什么,我必须仔细检查。重复问题,看,看到这个问题确实会让我找到解决方案,但我不知道枚举数据类型,所以我不太可能找到它。另外,这里提出的问题与我的不同(他们已经有了比我多得多的代码!)谢谢,但这与我的问题并不相关。谢谢,这正是我需要的!为了使用string数组
资源,我对它做了一些修改,因为在应用程序的其他领域,我可以使用它,而不是使用一堆string
类型。
enum Status {
TO_BE_DONE(R.string.to_be_done),
PENDING(R.string.pending),
COMPLETED(R.string.completed);
private final int mStringResource;
private Status(final int stringResource) {
mStringResource = stringResource;
}
public String asString(final Context context) {
return context.getString(mStringResource);
}
}