Spec-Zone .ru
спецификации, руководства, описания, API
След: API Reflection
Урок: Массивы и Перечислимые типы
Раздел: Перечислимые типы
Получение и Установка Полей с Перечислимыми Типами
Домашняя страница > API Reflection > Массивы и Перечислимые типы

Получение и Установка Полей с Перечислимыми Типами

Поля, которые хранят перечисления, устанавливаются и получаются как любой другой ссылочный тип, используя Field.set() и Field.get(). Для получения дополнительной информации по доступу к полям см. Полевой раздел этого следа.

Рассмотрите заявление, которое должно динамически изменить уровень трассировки в серверном приложении, которое обычно не позволяет это изменение во время времени выполнения. Предположите, что экземпляр серверный объекта доступен. SetTrace пример показывает, как код может преобразовать String представление перечисления в перечислимый тип и получает и устанавливало значение поля, хранящего перечисление.


import java.lang.reflect.Field;
import static java.lang.System.out;

enum TraceLevel { OFF, LOW, MEDIUM, HIGH, DEBUG }

class MyServer {
    private TraceLevel level = TraceLevel.OFF;
}

public class SetTrace {
    public static void main(String... args) {
	TraceLevel newLevel = TraceLevel.valueOf(args[0]);

	try {
	    MyServer svr = new MyServer();
	    Class<?> c = svr.getClass();
	    Field f = c.getDeclaredField("level");
	    f.setAccessible(true);
	    TraceLevel oldLevel = (TraceLevel)f.get(svr);
	    out.format("Original trace level:  %s%n", oldLevel);

	    if (oldLevel != newLevel) {
 		f.set(svr, newLevel);
		out.format("    New  trace level:  %s%n", f.get(svr));
	    }

        // production code should handle these exceptions more gracefully
	} catch (IllegalArgumentException x) {
	    x.printStackTrace();
	} catch (IllegalAccessException x) {
	    x.printStackTrace();
	} catch (NoSuchFieldException x) {
	    x.printStackTrace();
	}
    }
}

Так как перечислимые константы являются одиночными элементами, == и != операторы могут использоваться, чтобы сравнить перечислимые константы того же самого типа.

$ java SetTrace OFF
Original trace level:  OFF
$ java SetTrace DEBUG
Original trace level:  OFF
    New  trace level:  DEBUG

Проблемы с примерами? Попытайтесь Компилировать и Выполнить Примеры: FAQ.
Жалобы? Поздравление? Предложения? Дайте нам свою обратную связь.

Предыдущая страница: Исследование Перечислений
Следующая страница: Поиск и устранение неисправностей