Spec-Zone .ru
спецификации, руководства, описания, API
|
Поле может быть или типа примитива или ссылочного типа. Есть восемь типов примитивов: boolean
, byte
, short
, int
, long
, char
, float
, и double
. Ссылочный тип - что-либо, что является прямым или косвенным подклассом java.lang.Object
включая интерфейсы, массивы, и перечислимые типы.
пример печатает тип поля и универсальный тип, данный полностью определенное двоичное имя class и имя поля.FieldSpy
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()
Field.getType()
getGenericFoo
поскольку некоторое значение Foo реализуется так же.