Я очень плохо знаком с 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()
одинаково, но безуспешно.
Я сейчас нахожусь в точке, что это, вероятно, "константы объекта"? Я не уверен, как их назвать. Но я определенно не знаю, как заставить это работать сейчас, и после всего, что я попробовал сам, я решил, что пришло время обратиться за помощью сюда.