Java 访问中旧代码中的私有枚举
我有一个遗留代码,其中是private enum,我需要为验收测试构造另一个类型,但我被卡住了,因为这个enum是private的,它不是任何类的一部分,如下所示:Java 访问中旧代码中的私有枚举,java,enums,Java,Enums,我有一个遗留代码,其中是private enum,我需要为验收测试构造另一个类型,但我被卡住了,因为这个enum是private的,它不是任何类的一部分,如下所示: enum Element { ELEMENT1, ELEMENT2; public static Element[] values() { /* compiled code */ } public static Element valueOf(java.lang.String name) { /* com
enum Element {
ELEMENT1, ELEMENT2;
public static Element[] values() { /* compiled code */ }
public static Element valueOf(java.lang.String name) { /* compiled code */ }
private Element() { /* compiled code */ }
}
有没有一种方法可以使用这个枚举,从遗留代码中公开它,或者是模拟它
更新:
我知道我可以通过反射读取枚举值,但我有另一个公共类,我需要在其构造函数中使用枚举值,该类与元素位于同一个包中,其构造函数是:
public class ElementProvider {
public ElementProvider(string name, Element element){ /*compiled code*/ }
}
一种方法是使用
Class.forName
并使用package+name加载它
例如:
Class<?> enumElement = Class.forName("com.my.package.Element");
您被迫使用对象
,因为您不知道它将是什么类型(当然,您知道,但您无法访问它)
并使用enummelements[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);
Class enumElement=Class.forName(“org.myname.test.Element”);
对象[]枚举元素=元素。getEnumConstants();
Object element1=enumElements[0];
ElementProvider ElementProvider=ElementProvider.class.getDeclaredConstructor(String.class,enumElement).newInstance(“Hello”,element1);
它是私人的吗?它的定义是什么?根据上面的代码,它是包默认值@user3218114看起来像包私有。嗯,我认为反射是这里唯一的方法是它是包私有的,如何通过反射到达不属于任何类的enum?基本上我只知道名称空间。可能的重复请参见
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);