访问另一个类中的内部枚举以进行测试
如何访问另一个类中的内部枚举类? 例如:
public class Foo { enum Bar { ONE, TWO, FOUR, EIGHT, SIXTEEN } // ...methods here }
我正在尝试访问Foo.Bar
的类:
public class FooTest { private Foo f; @Before public void setUp() throws Exception { f = new Foo(); } public void testCase1() { assertEquals(Bar.ONE, f.climbUp()); } }
我尝试过Foo.Bar.ONE
, Bar.ONE
以及使用Foo.class.getDeclaredField("Bar")
创建一个新变量,但这些似乎都没有用。 getDeclaredClasses()
似乎得到了$Bar
但我无法从那里访问任何东西。
更新:我不允许修改类Foo
如果目标是测试它,但保持枚举在默认的可访问性( package-private
),这是由于你无法编辑Foo
和另一个类的标题,那么一个常见的方法是在相同的包裹。 这意味着它可以使用default
可见性访问项目( 请参阅此处 )。
考试:
package com.scratch; public class FooTest { public static void main(String[] args) { System.out.println(String.valueOf(Foo.Bar.ONE)); } }
另一个来源:
package com.scratch; public class Foo { enum Bar { ONE, TWO; } }
你不需要在这里使用reflection。 只需使枚举“静态”:
public class Foo { static enum Bar { ONE, TWO, FOUR, EIGHT, SIXTEEN } // ...methods here }
然后你可以通过Foo.Bar.ONE访问它