我有遗留代码,其中是私有枚举,我需要构建另一种类型进行验收测试,但我被卡住,因为这个枚举是私有的,它不属于任何类,如下所示:
enum Element {
ELEMENT1, ELEMENT2;
public static Element[] values() { /* compiled code */ }
public static Element valueOf(java.lang.String name) { /* compiled code */ }
private Element() { /* compiled code */ }
}
Run Code Online (Sandbox Code Playgroud)
有没有办法如何使用这个枚举,从遗留代码中暴露它,或者可能如何模拟它?
更新:我知道我可以通过反射读取值枚举,但我有另一个公共的类,我需要在其构造函数中使用枚举值,这个类与Element在同一个包中,它的构造函数是:
public class ElementProvider {
public ElementProvider(string name, Element element){ /*compiled code*/ }
}
Run Code Online (Sandbox Code Playgroud)
一种方法是使用Class.forName包+名称来使用和加载它.
例如:
Class<?> enumElement = Class.forName("com.my.package.Element");
Run Code Online (Sandbox Code Playgroud)
然后,如果一切正常,你将拥有枚举.
然后getEnumConstants你可以读取枚举的所有常量(如果需要,你可以检查它是否是枚举isEnum):
Object[] enumElements = elements.getEnumConstants();
for (Object obj : enumElements) {
System.out.println(obj);
}
Run Code Online (Sandbox Code Playgroud)
您被迫使用,Object因为您不知道它将是什么类型(嗯,你知道,但你无法访问它)
并用于enumElements[0]访问ELEMENT1等.
关于您更新的问题,这是我脑海中的第一件事:
Class<?> enumElement = Class.forName("org.myname.test.Element");
Object[] enumElements = elements.getEnumConstants();
Object element1 = enumElements[0];
ElementProvider elementProvider = ElementProvider.class.getDeclaredConstructor(String.class, enumElement).newInstance("Hello", element1);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
862 次 |
| 最近记录: |