这是在 Android 应用程序中,但这个问题通常也适用于 Java/OOP。
在我的应用程序中,我有一个 Job 类,它代表用户需要完成的作业。它的属性之一是status
,它只能有三个值:“待完成”、“待处理”或“已完成”。
我希望允许将应用程序翻译成其他语言,因此我一直使用 XML 中的 Android 的 string-array
资源类型来存储这些值:
<string-array name="jobs_statuses">
<item>To be done</item>
<item>Pending</item>
<item>Completed</item>
</string-array>
我希望能够使用代码中的 status
属性进行比较,例如:
if (myJob.getStatus() == Job.STATUS_COMPLETED) // Do something
我考虑过将属性存储在类中作为 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 中的本地化字符串)
我是否缺少一个明显的解决方案?
提前致谢。
最佳答案
正如戴夫·牛顿已经建议的那样,我会做这样的事情:
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()
方法获取本地化的String
。
关于java - 使用一组有限值的 String 类属性的最有效方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22357882/