java - 将字节转换为枚举

标签 java enums casting byte

我有以下代码:


public enum PortableTypes { Boolean, etc...};

public void testConversion() {
  byte b = 5;
  PortableTypes type = (PortableTypes)b;
}

当我编译时,我被告知这些是不可转换的类型。我不知道像这样简单的东西会被排除在 java 之外。我错过了什么,还是 Java 根本不支持转换为枚举?我也用 int 测试过,但失败了。

如果不支持,最简单的解决方法是什么?

编辑:

既然大家都在提示“糟糕的设计”,那我再解释一下。我使用枚举来表示您可以使用我的 TcpServer 发送的类型。数据包以这种类型发送,在接收端我查看类型并使用它将从数据包中读取的字节转换为可用数据。显然您不能使用 OutputStream 发送枚举,因此我需要将枚举值转换为要发送的数值。我不同意这是“糟糕的设计”的观点,我认为枚举确实应该用于这个目的,但这种设计在 Java 中不起作用,因为它是强类型的。

最佳答案

您可能认为 enum 就像我们在 c/C++ 或 C# 中使用的东西,它基本上是用于声明常量的语法糖。

Java 的 enum 是一个完全不同的野兽……它是 Typesafe Enum pattern 的内置实现。 .由于它是强类型的,因此无法直接从字节甚至整数转换为枚举。

但所有枚举都是 Java 中的完整类,因此没有什么能阻止您实现一个额外的方法来为您进行这种转换。

希望对您有所帮助。

编辑:同样,我不是 Java 程序员,但我想这样的事情会起作用:

public enum PortableTypes {
    Boolean,
    Type2,
    Type3;

    public static PortableTypes convert(byte value) {
        return PortableTypes.values()[value];
    }        
};

public void testConversion() {
    byte b = 5;
    PortableTypes type = PortableTypes.convert(b);
}

让我知道它是否有效。

关于java - 将字节转换为枚举,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5542367/

相关文章:

java - 关于Build.VERSION.SDK_INT

javascript - 将 js 从文件系统加载到 spring boot jar 应用程序中(使用 thymeleaf)

使用枚举的 Swift 3 惰性缓存

swift - 有没有更好的方法从字典(JSON 数据)中获取数字?

c++ - c++ 中有没有一种方法可以将指针转换为它指向的真实类型?

c++ - 为什么使用 static_cast<int>(x) 而不是 (int)x?

java - 纹理浮桥 - 旋转问题

java - Jsoup formElement.submit().post() 未提交指定的值

c++ - C++ 中的枚举类不能在 Mac 中编译,而在 Windows 中可以工作

java - 如何在 Java 中使用反射获取 Enum 字段名称?