Как получить константу в java с классом
В основном мне нужно получить константу для класса, но у меня нет экземпляра объекта, а только его класса.
В PHP я бы сделал constant(XYZ);
Есть ли аналогичный способ получения константы в JAVA?
Мне нужно, чтобы облегчить динамический вызов getMethod
Class parameterType = Class.forName(class_name);
object.setProperty(field name, field value, parameterType);
метод свойства set затем получит правильный метод и задает указанное свойство, однако я не могу получить метод, который имеет int как тип параметра без использования Interger.TYPE
Ответы
Ответ 1
Я не уверен, что вы хотите выбраться. Но это не должно быть слишком сложно показать вам пример.
Допустим, у вас есть класс Foo с панелью свойств.
Class Foo {
private final String bar = "test";
public String getBar() {return bar;}
}
Теперь, чтобы получить это через отражение, вы бы:
Class fooClass = Foo.class;
Object fooObj = fooClass.newInstance();
Method fooMethod = fooClass.getMethod("getBar");
String bar = (String) fooMethod.invoke(fooObj);
Теперь вы получите значение метода getBar() в переменной bar
Ответ 2
Вы можете искать sth. как
Foo.class.getDeclaredField("THIS_IS_MY_CONST").get(null);
или
Class.forName("Foo").getDeclaredField("THIS_IS_MY_CONST").get(null);
(спасибо f-o-o)
Получает значение константы String (THIS_IS_MY_CONST) в классе Foo.
Update
используйте null
в качестве аргумента для get
благодаря acdcjunior
Ответ 3
Если эта константа является метаданной о классе, я бы сделал это с помощью annotations:
Первый шаг, объявите аннотацию:
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
@interface Abc {
String value();
}
Шаг второй, аннотируйте свой класс:
@Abc("Hello, annotations!")
class Zomg {
}
Шаг третий: извлеките значение:
String className = "com.example.Zomg";
Class<?> klass = Class.forName(className);
Abc annotation = klass.getAnnotation(Abc.class);
String abcValue = annotation.value();
System.out.printf("Abc annotation value for class %s: %s%n", className, abcValue);
Выход:
Abc annotation value: Hello, annotations!
Ответ 4
Возможно, я не понимаю, что вам нужно, но вы пытались с последними статическими атрибутами и статическими методами?
Финал означает, что он не может быть изменен после установки, поэтому вы получаете константу.
Static означает, что он доступен, даже если нет объектов класса.