通过程序大小的计算值的类型
-
22-07-2019 - |
题
我正在写一个单元的测试方法,包布尔价值观纳入一个字节。各位地点确定的价值的一枚举,其中只有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。
我知道你在想拿出一个通用的解决方案,但在这种情况下,我会拿出偷懒的方法和硬编码的大小,并添加一些注释。
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);
不隶属于 StackOverflow