Язык программирования
JAVA
Лекция# 6 (Часть 2)
Reflection API
Моисеенко Антон
canggu@mail.ru
СПГУАП
Кафедра Информационно-Сетевых Технологий
Содержание курса
1. Доступ к информации о классе
2. Создание экземпляра класса
3. Вызов методов
Доступ к информации о классе
Reflection API – позволяет получать всю
возможную информацию о классе.
Существует 3 способа:
MyClass a = new MyClass();
Class<MyClass> aclass = a.getClass();
Class<MyClass> aclass = MyClass.class;
Class<?> c = Class.forName(“java.lang.Byte”);
• Classloader найдет указанный класс и
подгрузит
• Может выбрасывать ClassNotFoundException
• Используется когда необходимо подгружать
классы динамически
Доступ к информации о классе
• getName()
• полное имя (java.lang.integer)
• getSimpleName()
• короткое имя (Integer)
• getModifiers()
• модификаторы доступа (Modifier.isPublic(..))
• getSuperclass
• получение родителя, для интерфейсов возвращает null
• getInterfaces()
• получение всех имплементируемых (наследуемых для interface)
интерфейсов. Не учитывает интерфейсы суперкласса
Доступ к информации о классе
• getFields(): Field[] //только публичные, включая поля
суперкласса
• getDeclaredFields(): Field[]
• getField(String name): Field
• getMethods(): Method[] //только публичные , включая методы
суперкласса
• getDeclaredMethds(): Method[]
• getMethod(name, paramTypes): Method
• getConstructors(): Constructor<?>[]
• getDeclaredConstructors(): Constructor<?>[]
• getConstructor(paramTypes): Constructor<?>
• полное имя (java.lang.integer)
Создание экземпляра класса
Как динамически создать объект класса по его
имени?
• Если в классе определен дефолтовый конструктор:
Class<?> c = Class.forName(“SimpleService”);
Object obj = c.newInstance();
SimpleService test = (SimpleService)obj;
• Если в классе имеется конструктор с параметрами:
Constructor<?> con = c.getConstructor(…);
Object obj = con.newInstance(…);
Вызов методов
Class[] paramTypes = new Class[] {String.class, int.class}
Method method = c.getMethod(“MethodName”, paramTypes);
Object[] args= new Object[] {new String(“aa”), new Integer(10)};
Double d = (Double) method.invoke(obj, args);
Вопросы?

Java core-lect6-part2-reflection-api.ppt

  • 1.
    Язык программирования JAVA Лекция# 6(Часть 2) Reflection API Моисеенко Антон canggu@mail.ru СПГУАП Кафедра Информационно-Сетевых Технологий
  • 2.
    Содержание курса 1. Доступк информации о классе 2. Создание экземпляра класса 3. Вызов методов
  • 3.
    Доступ к информациио классе Reflection API – позволяет получать всю возможную информацию о классе. Существует 3 способа: MyClass a = new MyClass(); Class<MyClass> aclass = a.getClass(); Class<MyClass> aclass = MyClass.class; Class<?> c = Class.forName(“java.lang.Byte”); • Classloader найдет указанный класс и подгрузит • Может выбрасывать ClassNotFoundException • Используется когда необходимо подгружать классы динамически
  • 4.
    Доступ к информациио классе • getName() • полное имя (java.lang.integer) • getSimpleName() • короткое имя (Integer) • getModifiers() • модификаторы доступа (Modifier.isPublic(..)) • getSuperclass • получение родителя, для интерфейсов возвращает null • getInterfaces() • получение всех имплементируемых (наследуемых для interface) интерфейсов. Не учитывает интерфейсы суперкласса
  • 5.
    Доступ к информациио классе • getFields(): Field[] //только публичные, включая поля суперкласса • getDeclaredFields(): Field[] • getField(String name): Field • getMethods(): Method[] //только публичные , включая методы суперкласса • getDeclaredMethds(): Method[] • getMethod(name, paramTypes): Method • getConstructors(): Constructor<?>[] • getDeclaredConstructors(): Constructor<?>[] • getConstructor(paramTypes): Constructor<?> • полное имя (java.lang.integer)
  • 6.
    Создание экземпляра класса Какдинамически создать объект класса по его имени? • Если в классе определен дефолтовый конструктор: Class<?> c = Class.forName(“SimpleService”); Object obj = c.newInstance(); SimpleService test = (SimpleService)obj; • Если в классе имеется конструктор с параметрами: Constructor<?> con = c.getConstructor(…); Object obj = con.newInstance(…);
  • 7.
    Вызов методов Class[] paramTypes= new Class[] {String.class, int.class} Method method = c.getMethod(“MethodName”, paramTypes); Object[] args= new Object[] {new String(“aa”), new Integer(10)}; Double d = (Double) method.invoke(obj, args);
  • 8.