gpt4 book ai didi

java - 通过反射获取在导入类中声明的枚举常量

转载 作者:行者123 更新时间:2023-12-01 04:38:19 24 4
gpt4 key购买 nike

有类似的东西:

import com.example.test.classA;
import com.example.test.classB;
import com.example.test.classC;

public class MyClass {
...
Flavors p = Flavors.VANILLA;
...
String flavorChoice = "Flavors.CHOCOLATE";
...
}

其中 Flavors 是在导入类之一中声明的 enum:

public enum Flavors { CHOCOLATE, VANILLA, LEMON };

如何使用反射从字符串 flavorChoice 获取值?
不要假设我知道在哪个导入类 Flavors 中声明。
甚至不要假设可以从 MyClass 中访问 Flavors

澄清
字符串 flavorChoices 应该生成一个 Object,在上面的示例中,该对象可能是 Flavors 类型。但它也可能引用其他枚举中的其他常量:

String flavorChoice = "ExtraFlavors.MENTA";
String flavorChoice = "ExoticFlavors.CHALK";
String flavorChoice = "AnyEmun.ANYCONSTANT";

直到运行时我才知道字符串内容是什么。我希望能够:

  1. 检查引用的枚举确实存在并且可以从 MyClass 访问
  2. 获取引用的枚举常量并将其放入对象

最佳答案

如果字符串重新定义如下:

String flavorChoice = "CHOCOLATE";

你甚至不需要反射(reflection)。只需使用 Flavors.valueOf(flavorChoice) .

根据您的情况,您可以说:

String choice = "Flavors.CHOCOLATE";
String[] fragments = choice.split("\\.");
Enum.valueOf(Class.forName(fragments[0]), fragments[1]);

Class.forName(fragments[0])将返回您的 enum的类(class),Enum.valueOf()返回 enum 的元素.

编辑:如果在现实情况下您的类属于包,您应该通过替换 split() 来改进解析。到别的东西。

关于java - 通过反射获取在导入类中声明的枚举常量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17011010/

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