java - 使用一组有限值的 String 类属性的最有效方法

标签 java android string oop

在 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/

相关文章:

java - 如何使用 Java 在 Storm Bolts 中编写prepare() 方法?

python - 使用定界符从列表中提取数据

java - 在 NetBeans 7.4 中为 Java 程序设置动态 Apple 菜单标题

java - 我们可以(或者应该)为不同的 Android 项目使用相同的文件吗?

android - 如何在 android 中获取有效的 firebase token ?

java - 允许从 OnClickListener 非最终变量修改对象

java - EditText 无法在特定 Android 设备上运行

c++ - 在vs2012中 move 一个字符串

c - _memccpy 的宽字符版本

java - 如何刷新 recyclerview 的上一个项目行 View 的 View