【问题标题】:Java Enum with numeric values具有数值的 Java 枚举
【发布时间】:2015-03-02 13:01:21
【问题描述】:

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

在 .Net 中,我可以对值进行枚举。在代码中使用时,我无需注释,或者在编写新过程时,请记住 0、1、2 和 3 代表什么。我还可以在构造函数中使用枚举作为参数类型,然后将 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";
}

【问题讨论】:

标签: android enums


【解决方案1】:

实际上,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;
    }
}

【讨论】:

  • 谢谢两位。我阅读了两三个 Java 枚举示例,但都没有展示如何添加这样的值。它们是一周中的几天或颜色,或其他只有字符串的东西。令人沮丧。
【解决方案2】:

请查看 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;
}

【讨论】:

    猜你喜欢
    • 2010-12-13
    • 1970-01-01
    • 2021-12-22
    • 1970-01-01
    • 2021-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多