【发布时间】:2012-09-26 14:19:16
【问题描述】:
出于各种业务原因,我想在我的一个类中保存一些静态 ID。它们最初是int,但我想将它们更改为Integer,这样我就可以对它们做一个equals(即MY_ID.equals(..),它避免了NPE)
当我将它们更改为整数时,我的 switch 语句中出现错误。 docs 说整数在 Switch 中应该没问题。
引用
[Switch] 也适用于枚举类型(在枚举类型中讨论), String 类,以及一些包装某些特定类的特殊类 原始类型:Character、Byte、Short 和 Integer(在 数字和字符串)。
在我下面的代码中,如果 i 是 int,那么它会编译。当它是Integer 时,它不会说是constant expression is required。我尝试过.intValue(),但这也不起作用。
我真的很傻吗?还是完全误读了docs?
private static final Integer i = 1;
@Test
public void test() {
switch(mObj.getId()){
case i: //do something
default: //do something default
}
}
感谢您在此提供的任何指示。暂时我将它们保留为int 并做new Integer(myint).equals(...)
【问题讨论】:
-
我建议你使用枚举。它们非常适合这种情况。
-
是的,我同意@dystroy。这些 ID 与数据库中的 id 匹配,这就是我们使用它的原因。我想我们可以使用枚举...
-
我也是用DB中匹配的枚举,没有问题。枚举现在在 java 中真的很强大。
-
我只想澄清原始类型,如 int,不能在 Java 中抛出空指针异常 (NPE),只有对象引用可以。所以使用 int 应该仍然是一个可行的选择。
标签: java switch-statement