我正在写一个单元的测试方法,包布尔价值观纳入一个字节。各位地点确定的价值的一枚举,其中只有5个值的权利,但它是可以想象的(虽然极不可能的),这个数字可以去到9个。

我想一个简单的测试沿线:

私字节m_myNum;枚举MyEnum{...}

assert(sizeof(m_myNum) <=MyEnum.值().长);

我的印象是,没有一个sizeof功能。什么是最优雅的解决方法?

---编辑

我不认为我是清楚的。我不关心的正常运行时间。我的问题是,我可以写这些代码现在有一个字存储所有信息,但以枚举的成长在一个不相关的部分代码,我可能会达到一个点,在那里我的bitmasking码的休息时间。而不是具有在这一部署的应用程序,我想要有一个单元的测试失败时的国家数目在超过枚举的数位存储可变的,因此当一个程序员增加了,九枚举,他们可以调整类型的变量到的东西超过八位。

有帮助吗?

解决方案

我觉得这个测试你想要做什么。这可能是你的时间浪费比这更通用。

public void testEnumSizeLessThanOneByte() throws Exception 
{ 
    assertTrue("MyEnum must have 8 or less values.", 
                MyEnum.values().length <= 8);
}

其他提示

如果这是一个真正的问题和性能并不重要,你可以随时使用的位集

在Java字节具有固定大小(8个比特),所以没有必要的sizeof。

我找到了 这个问题 这可以帮助你:-)

不幸的是,没有sizeof()in Java,但是看一看在回答这个问题。一个我发现了有趣的是 这篇文章 从JavaWorld.

首先,是的,有一个在Java中没有sizeof操作符。但是的sizeof(字节)始终是1反正。这真的是你的意思是说什么?

二,您如何打算,以适应9个布尔成一个字节?不与位掩码,希望

如果您只是想找到某个设定的最高位,你可以使用Integer.highestOneBit(m_myNum & 0xFF)(见文档的此处)。


编辑:请您谈一下改变存储到更大的类型,当有枚举值过多。根据这个问题,没有内存理由不使用byte而不是int,除非你有一个数组。所以我说用最小的int,并升级到long如果大小超过32是不是很简单?

我知道你在想拿出一个通用的解决方案,但在这种情况下,我会拿出偷懒的方法和硬编码的大小,并添加一些注释。

static final int MAX_BITS_IN_MY_NUM = 8; // Currently set to size of a byte.  
                                         // Update if data type changes from byte to something larger than a byte.
...
assertTrue(MAX_BITS_IN_MY_NUM >= MyEnum.values().length);
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top