Получение Типов поля (Учебные руководства Java™> API Reflection> Элементы)


След: API Reflection
Урок: Элементы
Раздел: Поля
Получение Типов поля
Домашняя страница > API Reflection > Элементы

Получение Типов поля

Поле может быть или типа примитива или ссылочного типа. Есть восемь типов примитивов: boolean, byte, short, int, long, char, float, и double. Ссылочный тип - что-либо, что является прямым или косвенным подклассом java.lang.Object включая интерфейсы, массивы, и перечислимые типы.

FieldSpy пример печатает тип поля и универсальный тип, данный полностью определенное двоичное имя class и имя поля.


import java.lang.reflect.Field;
import java.util.List;

public class FieldSpy<T> {
    public boolean[][] b = {{ false, false }, { true, true } };
    public String name  = "Alice";
    public List<Integer> list;
    public T val;

    public static void main(String... args) {
	try {
	    Class<?> c = Class.forName(args[0]);
	    Field f = c.getField(args[1]);
	    System.out.format("Type: %s%n", f.getType());
	    System.out.format("GenericType: %s%n", f.getGenericType());

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

Демонстрационный вывод, чтобы получить тип трех общедоступных полей в этом class (b, name, и параметризованный тип list), следует. Ввод данных пользователем курсивом.

$ java FieldSpy FieldSpy b
Type: class [[Z
GenericType: class [[Z
$ java FieldSpy FieldSpy name
Type: class java.lang.String
GenericType: class java.lang.String
$ java FieldSpy FieldSpy list
Type: interface java.util.List
GenericType: java.util.List<java.lang.Integer>
$ java FieldSpy FieldSpy val
Type: class java.lang.Object
GenericType: T

Тип для поля b двумерный массив булевых. Синтаксис для имени типа описывается в Class.getName().

Тип для поля val сообщается как java.lang.Object потому что обобщения реализуются через стирание типа, которое удаляет всю информацию относительно универсальных типов во время компиляции. Таким образом T заменяется верхней границей переменной типа, в этом случае, java.lang.Object.

Field.getGenericType() будет консультироваться с Атрибутом Подписи в файле class, если это будет присутствовать. Если атрибут не доступен, он возвращается Field.getType() который не был изменен введением обобщений. Другие методы в отражении с именем getGenericFoo поскольку некоторое значение Foo реализуется так же.


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

Предыдущая страница: Поля
Следующая страница: Получение и Парсинг Полевых Модификаторов



Spec-Zone.ru - all specs in one place