【发布时间】:2013-06-09 23:44:02
【问题描述】:
有类似的东西:
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 中声明。
甚至不要假设Flavors 可以从MyClass 中访问。
澄清
字符串flavorChoices 应该产生Object,在上面的示例中,对象可能是Flavors 类型。但它也可能引用其他枚举中的其他常量:
String flavorChoice = "ExtraFlavors.MENTA";
String flavorChoice = "ExoticFlavors.CHALK";
String flavorChoice = "AnyEmun.ANYCONSTANT";
直到运行时我才知道字符串内容是什么。我希望能够:
- 检查引用的枚举确实存在并且可以从 MyClass 访问
- 获取引用的枚举常量并将其放入
Object
【问题讨论】:
-
如果您不知道要引用哪个特定的
Flavors类,那么这怎么可能起作用? -
也许this question,经过一些修改,可能有用吗?
-
实际上,您为什么不知道
Flavors类的声明位置?即使你通过反射得到它,如果你没有导入它,你也只能将它存储为Object(或Enum<?>)...... -
@OliCharlesworth 这就是为什么我在示例中放置
Flavors p = Flavors.VANILLA行,以表明无需反射我可以使用Flavors,而无需确切知道它的声明位置。为简单起见,如果它有助于您制定答案,假设系统中只声明了一个Flavors。 -
@WChargin 实际上,我知道
Flavors的声明位置。我事先不知道的是字符串flavorChoice,它可以引用任何在该范围内可见的enum。它甚至可以引用一些在那里无法访问的enum,在这种情况下我想调用RuntimeException。
标签: java reflection