gpt4 book ai didi

java - 在遗留代码中访问私有(private)枚举

转载 作者:行者123 更新时间:2023-12-04 20:49:01 25 4
gpt4 key购买 nike

我有遗留代码,其中是私有(private)枚举,我需要为验收测试构造另一种类型,但我被卡住了,因为这个枚举是私有(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)类,我需要在它的构造函数中使用枚举值,这个类和 Element 在同一个包中,它的构造函数是:

public class ElementProvider {
public ElementProvider(string name, Element element){ /*compiled code*/ }
}

最佳答案

一种方法是使用 Class.forName 并使用包 + 名称加载它。

例如:

Class<?> enumElement = Class.forName("com.my.package.Element");

然后,如果一切正常,您将获得枚举。

然后使用 getEnumConstants,您可以读取枚举的所有常量(如果需要,您可以使用 isEnum 检查它是否是一个枚举):

Object[] enumElements = elements.getEnumConstants();

for (Object obj : enumElements) {
System.out.println(obj);
}

你被迫使用 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);

关于java - 在遗留代码中访问私有(private)枚举,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25076468/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com