как получить константу в Java с классом

в основном я должен получить константу для класса однако, у меня нет экземпляра объекта, но только его класса. В PHP я сделал бы constant(XYZ); Существует ли похожий способ получить константу в JAVA?

Мне нужен он для упрощения динамического вызова getMethod

Class parameterType = Class.forName(class_name);
object.setProperty(field name, field value, parameterType);

метод свойства набора затем получил бы корректный метод и установил бы указанное свойство, однако я не могу получить метод, который имеет интервал как тип параметра, не используя Interger. ВВЕСТИ

11
задан luxerama 19 May 2010 в 10:26
поделиться

3 ответа

Я не уверен, что вы хотите получить. Но показать вам пример не должно быть слишком сложно.

Допустим, у вас есть Class 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

1
ответ дан 3 December 2019 в 01:51
поделиться

Может быть, я не понимаю, что вам нужно, но пробовали ли вы использовать final статические атрибуты и статические методы?

Final означает, что его нельзя изменить после установки, поэтому вы получаете константа. Статический означает, что он доступен, даже если в классе нет никаких объектов.

0
ответ дан 3 December 2019 в 01:51
поделиться

Если эта константа является метаданными о классе, я бы сделал это с аннотациями :

Первый шаг, объявите аннотацию:

@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!
2
ответ дан 3 December 2019 в 01:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: