在Java中将布尔值转换为字节

21

我需要将字节值设置为方法参数。我有一个布尔变量isGenerated,它确定在此方法内要执行的逻辑。但是我不能直接将布尔值作为字节参数传递,因为这在Java中不被允许并且无法进行强制转换。所以现在我的解决方案看起来像这样:

myObj.setIsVisible(isGenerated ? (byte)1 : (byte)0);

但对我来说这似乎有些奇怪。或许存在更好的解决方案吗?


8
一个名为 setIsVisible 的方法接受除布尔值以外的任何东西,这很奇怪... - assylias
你可以避免投掷0。 - Vitaliy Kulikov
3个回答

26

你的解决方案是正确的。

如果您愿意,可以通过以下方式避免进行一个强制类型转换:

myObj.setIsVisible((byte) (isGenerated ? 1 : 0 ));

另外,您应考虑以下更改来实现:

  • 如果需要考虑超过2个可能状态,请更改您的方法为类似于setVisiblityState(byte state)的内容。

  • 如果您的方法执行的是其名称所示的操作,请将其更改为setIsVisible(boolean value)


myObj.setIsVisible((byte) isGenerated)); 这样写是否可行?因为 isGenerated 已经是 true|false,我假设它已经被转换成了 1|0,所以避免使用 ?: 操作符。如果我理解有误,请纠正我,因为这可能因语言而异。 - Matt

5

您可以使用此解决方案。我在这个非常有用的页面中找到了它。

boolean vIn = true;
byte vOut = (byte)(vIn?1:0);

1
这并不奇怪,而是可以接受的。 奇怪的是你需要将键入的布尔值转换为不自解释的字节。但是在使用传统API时有时必须这样做。 另外,如果您想节省内存,可以使用1位而不是1字节,因此您可以将多个布尔标志分组在一起,同时为每个布尔值使用位。但是,这种技术仅适用于大量数据,只有在节省几个字节时才会有重要意义。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接