gpt4 book ai didi

Java 枚举行为

转载 作者:行者123 更新时间:2023-12-01 16:09:11 25 4
gpt4 key购买 nike

我们有以下枚举:

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com