作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我们有以下枚举:
public enum ComponentTypes {
PDIFF(301),
TDIFF(302),
TADJ(303);
private long componentTypeId;
private ComponentTypes(long componentTypeId){
this.componentTypeId = componentTypeId;
}
public Long getId(){
return this.componentTypeId;
}
}
在我们的一个测试设置中,我们执行c.setComponentTypeId(ComponentTypes.TADJ.getId())
,但是当在测试中调用c.getComponentTypeId()
时,它抛出 NullPointerException
,但 c.setComponentTypeId(303L)
按预期工作。使用枚举来设置值时缺少什么?
编辑
看起来@Tom 直接指出了长/长不一致的问题。现在 getId()
返回 long
而不是 Long
它按预期工作。
编辑
看起来我之前说的是错误的自动装箱确实按预期工作在我刷新系统jvm等之后就没有问题了——这对我来说没有任何意义!
最佳答案
你没有说“c”是什么类型,但我怀疑它的 setter 没有按照你想象的那样做——NullPointerException表明自动拆箱出了问题。您枚举本身似乎没有问题,尽管当成员为 long
时返回 Long
是一种代码味道。
实际上,使用枚举的 ID 调用 c.setComponentTypeId()
是另一种代码味道。为什么不通过 c.setComponentType()
使用枚举本身?您这样做的方式几乎失去了枚举的所有值(value)。
关于Java 枚举行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1847913/
我是一名优秀的程序员,十分优秀!