在修改我还不完全熟悉的现有应用程序时,我似乎遇到了
的情况EnumClass.valueOf(s)
无论我传入的null
值是什么(合法与否),都会返回String
。 EnumClass
本身很简单(基本上是public enum EnumClass { Name1, Name2, Name3 }
)。当我尝试独立测试时(即返回枚举类的对象或抛出IllegalArgumentException
),它的行为与预期的一样,但在较大的应用程序中,它返回null。
是否存在合法发生的条件?例如。是否有一个编译器选项导致不生成字符串表(用于空间优化)?我使用的是JDK 1.7。
编辑:好的,差不多一个月后,我终于有机会尝试缩小问题范围。它与JMockit有关,我们将其与JUnit结合使用。这是一个测试类:
@Mocked
private EnumClass2 e;
JMockit教程说可以模拟enum
类,虽然Java不允许你创建enum
的实例;我的猜测是,JMockit经历了一些真正的诡计以实现这一目标。无论如何,它显然没有正确发生。似乎使用这个导致valueOf
即使对于不同的enum
类也被搞砸了,与被模拟的那个没有关系。我不知道我们正在使用哪个版本的JMockit。
更多:我无法在家中重现这个问题,因此可能需要使用旧版本的JMockit,事物版本的组合或其他人的定制完成。