2014-10-16 3 views
2

Предположим, у меня есть класс Foo в пакете my.package, который содержит некоторые статические поля.Правильный способ достижения этого класса с использованием отражения

Я хочу использовать отражение, чтобы получить значения этих статических полей.

Я знаю, что могу написать my.package.Foo.class.getDeclaredField(..., но это неудовлетворительно, поскольку я жестко кодирую имена классов и пакетов.

Я хотел бы использовать this.class.getDeclaredField(..., но это недействительно в Java, даже если вызывается из нестатической функции-члена.

Есть ли способ?

+0

Non-статический, вы можете использовать 'this.getClass()'. – Pokechu22

ответ

3

Каждый класс наследует метод экземпляра Object#getClass(). Вызовите это, чтобы получить соответствующий объект вашего объекта Class.

Я не знаю, почему вы сделали бы это внутри Foo, поскольку Foo уже знает свои поля static, и у вас будет доступ к ним во время компиляции напрямую.

0

Нестатически, вы можете использовать this.getClass(), чтобы получить текущий класс, как указано @sotirios-delimanolis.

Статический, вы можете сделать это, хотя это немного некрасиво:

public static Class<?> getCurrentClassStatic() { 
    try { 
     return Class.forName(new Throwable().getStackTrace()[0].getClassName()); 
    } catch (ClassNotFoundException e) { 
     return null; //Shouldn't happen... 
    } 
}