带有数值的Java枚举

时间:2015-01-05 00:33:08

标签: android enums

Java新手,但我做了一些.Net编程。我想知道Java是否相当于.Net eum?以下是一个例子。我知道Java有枚举,但你不能为它赋值。

在.Net中,我可以使用值进行枚举。在代码中使用时,我不必发表评论,或者在编写新程序时,记住0,1,2和3代表的内容。我也可以在构造函数中使用enum作为参数类型,然后将AccessType.Full作为参数传递给它。

我如何复制这个是Android Studio?

Public Class Delete

    Private Enum AccessType
        Full = 0
        ReadOnly = 1
        Delete = 2
        Add = 3
    End Enum

    Private Sub DeleteIem(sItem As String)
        If User.Access = AccessType.Delete Or User.Access = AccessType.Full Then
            'delete something here
        Else
            MsgBox("You do not have access to delete these items.", vbInformation
        End If
    End Sub

End Class

在Android Studio中,我有下面的if {}块。

if (AllLists.get(pos).Access == 0) {
    MsgText += getResources().getString(R.string.info_cat_shared_no) + "\n";
}
else if (AllLists.get(pos).Access == 1){
    MsgText += getResources().getString(R.string.info_cat_shared_edit) + "\n";
}
else if (AllLists.get(pos).Access == 2){
    MsgText += getResources().getString(R.string.info_cat_shared_no_edit) + "\n";
}

它会将代码转到下面,我不必总是检查0,1,2和& 3表示。我查找了Java枚举,它们只是一个字符串列表,对此不起作用,或者至少不是我认为可以实现它。

if (AllLists.get(pos).Access == AccessType.Full) {
    MsgText += getResources().getString(R.string.info_cat_shared_no) + "\n";
}
else if (AllLists.get(pos).Access == AccessType.ReadOnly){
    MsgText += getResources().getString(R.string.info_cat_shared_edit) + "\n";
}
else if (AllLists.get(pos).Access == AccessType.Delete){
    MsgText += getResources().getString(R.string.info_cat_shared_no_edit) + "\n";
}

2 个答案:

答案 0 :(得分:4)

实际上,java枚举是一个非常方便的对象。 如果需要,您可以添加属性,甚至方法。要分配属性,只需将值作为参数添加到构造函数中,如下所示:

public enum AccessType {
    Full(0),
    ReadOnly(1),
    Delete(2),
    Add(3);
    private final int code;

    AccessType(int code) {
        this.code = code
    }

    public int getCode() {
        return this.code;
    }
}

答案 1 :(得分:1)

请查看Oracle的此页面:http://docs.oracle.com/javase/tutorial/java/javaOO/enum.html

您的ENUM(代码未经测试)会有类似的内容:

public enum AccessType
{
    Full(0),
    ReadOnly(1),
    Delete(2),
    Add(3);

    AccessType(int type)
    {
        this.type = type;
    }
}

但是构造函数本身可能没有必要,因为你可以使用这样的switch case:

switch(AllLists.get(pos).Access)
{
    case Full:
        // ...
        break;

    case ReadOnly:
        // ...
        break;

    case Delete:
        // ...
        break;

    case Add:
        // ...
        break;
}