【发布时间】:2017-01-18 22:02:21
【问题描述】:
我的应用程序获取需要转换为相应枚举值的外部数据。这是我的第一个方法:
public enum Side {
LEFT,
RIGHT;
public static Side fromByte(Byte b) throws Exception {
switch(b)
{
case 'l':
return LEFT;
case 'r':
return RIGHT;
default:
throw new Exception("not a valid byte");
}
}
}
这样可以吗,还是有更惯用的方法来做到这一点?
注意:忽略字节到字符的比较和非常通用的异常抛出,我稍后会研究——尤其是字符和字节类型的转换。似乎比我最初预期的要大。
【问题讨论】:
-
如果你不检查null,为什么参数是
Byte而不是byte? -
@Andreas 我从一些生成的 JNA 代码中获取参数并返回
Byte -
如果你有一个
Byte并且需要一个byte,Java 会自动拆箱,所以不要让这个方法的契约依赖于你的调用者如何获得它的价值。如果其他调用者有byte并且想要调用此方法,则您将强制编译器在调用时将其装箱,只是在switch语句的方法内将其拆箱。更改为byte,如果调用者有byte,则不会发生装箱/拆箱。简而言之,取你想要的价值,而不是你的调用者可能拥有的价值。 -
很高兴知道,我现在就去做!
-
@SMA 使用 map 意味着额外的内存。虽然如果有大量的情况应该考虑Map