如何访问另一个类的内部枚举类?例如:
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
答案 0 :(得分:1)
如果目标是对其进行测试,但将枚举保留为默认辅助功能(package-private
),这是由于您无法编辑Foo
和其他类的标题所暗示的,那么常见的方法是在同一个包中进行测试。这意味着它可以使用default
可见性(see here)访问项目。
测试:
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;
}
}
答案 1 :(得分:0)
您不需要在这里使用反射。只需使枚举“静止”:
public class Foo {
static enum Bar {
ONE, TWO, FOUR, EIGHT, SIXTEEN
}
// ...methods here
}
然后你可以通过Foo.Bar.ONE
访问它