The 2nd part of the 6th lecture from the course "Java Core".
The Department of Information and Network Technologies.
St-Petersburg State University Of Aerospace Instrumentation.
Russia
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);