Как получить константу в 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 означает, что он доступен, даже если нет объектов класса.