Dar*_*dro 3 java enums byte casting
我有以下代码:
public enum PortableTypes { Boolean, etc...};
public void testConversion() {
byte b = 5;
PortableTypes type = (PortableTypes)b;
}
Run Code Online (Sandbox Code Playgroud)
当我编译时,我被告知这些是不可转换的类型.我不知道像java这样简单的东西会被遗漏掉.我错过了什么,或者Java根本不支持转换为枚举?我也用int进行了测试,但失败了.
如果不支持,最简单的解决方法是什么?
编辑:
由于每个人都在抱怨"糟糕的设计",我会进一步解释.我使用枚举来表示您可以使用我的TcpServer发送的类型.数据包以这种类型发送,在接收端我查看类型并使用它将从数据包读取的字节转换为可用数据.显然你不能使用OutputStream发送枚举,所以我需要将枚举值转换为要发送的数值.我不同意这是"糟糕的设计"这个想法,我认为Enums确实应该用于这个目的,但是这个设计在Java中不起作用,因为它是强类型的.
您可能会认为enum我们在c/C++或C#中有类似的东西,它基本上是用于声明常量的语法糖.
Java enum是一个完全不同的野兽......它是Typesafe Enum模式的内置实现.由于它是强类型的,因此无法直接从字节或整数中转换枚举.
但是所有枚举都是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);
}
Run Code Online (Sandbox Code Playgroud)
如果有效,请告诉我.