java - 使用变量调用 Java 对象常量
问题描述
我对 Java 很陌生,所以我很难解释我想要做什么。
我有一个抽象类,它调用几个对象常量,如下所示:
public abstract class Enchantment implements Keyed {
/**
* Provides protection against environmental damage
*/
public static final Enchantment PROTECTION_ENVIRONMENTAL = new EnchantmentWrapper("protection");
在另一个文件中,我可以很好地访问它Enchantment value = Enchantment.PROTECTION_ENVIRONMENTAL;
但是,我正在尝试为此使用字符串变量。像这样的东西:
String str = "PROTECTION_ENVIRONMENTAL";
Enchantment value = Enchantment.str;
显然那是行不通的。所以我做了很多研究并了解到我需要为此使用反射。使用这个源代码的文档我想我正在寻找字段数据。所以我尝试了两个:
Field fld = Enchantment.class.getField("PROTECTION_ENVIRONMENTAL");
Field fld = Enchantment.class.getDeclaredField("PROTECTION_ENVIRONMENTAL");
但是这些给我返回了 NoSuchFieldException。正如我所做的那样,我已经尝试了这两种方法getMethod()
,而且getDeclaredMethod()
同样没有运气。
我现在的观点是这些可能是“对象常量”?我不知道怎么称呼他们。但是我现在绝对不知道如何让它工作,在我自己尝试了一切之后,我想是时候在这里寻求帮助了。
解决方案
如果您知道枚举将是常量值,则可能需要研究枚举;
public enum Enchantment {
PROTECTION_ENVIRONMENTAL {
public void cast() {
// do enum-specific stuff here
}
},
ANOTHER_ENCHANTMENT {
public void cast() {
// do enum-specific stuff here
}
},
A_THIRD_ENCHANTMENT{
public void cast() {
// do enum-specific stuff here
}
};
public abstract void cast();
}
枚举可以被视为类并具有方法和属性。您也可以在字符串之间进行转换,Enchantment.valueOf("PROTECTION_ENVIRONMENTAL")
但通常是从配置文件中读取 - 在代码中您将直接引用该值。
推荐阅读
- angular - ngFor内的Angular 2+ NgTemplateOutlet
- python - AttributeError:'NoneType'对象在使用jupyter notebook的python中没有属性'Mrc'
- kotlin - 什么是惯用的 Corda“协议”流程和状态?
- google-app-engine - 如何在谷歌应用引擎上同步实例数据?
- neo4j - neo4j - 不将关系链接到已创建的节点
- android - 如何设置音频文件的 mimetype,使其在 android 和 ios 上都可以使用?
- python - [Python][Pandas] 高效交叉比较两个groupby列中的值
- reactjs - React - 连续输入的单独框
- javascript - 正/负模数以获取范围内的项目
- r - 比较两列中的值并在 R 或 awk 中重新编码