访问另一个类中的内部枚举以进行测试

如何访问另一个类中的内部枚举类? 例如:

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.ONEBar.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访问它