Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/398.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 访问中旧代码中的私有枚举_Java_Enums - Fatal编程技术网

Java 访问中旧代码中的私有枚举

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

我有一个遗留代码,其中是private enum,我需要为验收测试构造另一个类型,但我被卡住了,因为这个enum是private的,它不是任何类的一部分,如下所示:

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);