Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用具有有限值集的字符串类属性的最有效方法_Java_Android_String_Oop - Fatal编程技术网

Java 使用具有有限值集的字符串类属性的最有效方法

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应用程序中是,但这个问题可能也适用于Java/OOP

在我的应用程序中,我有一个类作业,它表示用户要完成的作业。它的属性之一是
状态
,它只能有三个值:“待完成”、“挂起”或“完成”

我想将应用程序翻译成其他语言,因此我一直在使用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()
方法获取本地化的
字符串

这可能不是你问题标题的确切答案,但如果你正在寻找将你的应用程序翻译成不同语言的简便方法,谷歌确实为此提供了服务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);
    }

}