Download presentation
Presentation is loading. Please wait.
1
Reflection (Reflexion in British English ) Mo Alkhafaji
2
Reflection A powerful Java API that allows for dynamic introspection of classes, interfaces, methods, and fields. No similar built-in mechanism in Pascal, C, or C++. What can you do with Reflection? It gives you the ability to: * Discover interfaces, classes, methods and fields. * Examine and call classes, methods and constructors. * Discover types of objects. * Write very generic code.
3
The API *java.lang.Class — This class is used to represent classes. *java.lang.reflect.Constructor — A special class for inspecting any of a class's constructor methods. *java.lang.reflect.Method — This class provides an abstract means of invoking a Java method from a given class or object.
4
The API – Cont. *java.lang.reflect.Modifier — The Modifier class is used to determine whether special access modifiers (such as private, public, or protected) have been applied to a method or attribute. *java.lang.reflect.Array — This class is used as an abstract representation of array objects. *java.lang.reflect.Field — This class is used to represent an attribute field.
5
Practical Examples * JavaBeans. * Debuggers. * Class browsers. * Introspection. * Too generic tasks that cannot be grouped into interfaces or abstract classes.
6
Practical Examples - Cont. * A proxy to remote API that can change. * Changing code without recompiling it! * Specific requirements. * Artificial Intelligence (AI) in learning and dynamic generation of logic.
7
Disadvantages *Complex. You cannot use by only looking at the API. *Error prone. *Slow because classes, methods, and fields need to be loaded at runtime for introspection. *Security. *It does not update byte code.
8
Javassist *Unlike Reflection, Javassist API lets you manipulate and change byte code generated by Java compilers. *CtClass, CtMethod, and CtField. *Classes do not have to be loaded into JVM! *You can load using toClass() method in CtClass to load into JVM. *You can generate new classes and methods during runtime.
9
Javassist – Cont. 1. ClassPool pool = ClassPool.getDefault(); 2. CtClass pt = pool.get(“mypackage.PNLParser"); 3. pt.setSuperclass(pool.get(“ReportParser")); 4. CtMethod m = CtNewMethod.make("public void printType() { System.out.println(“PNL”); }", pt); 5. pt.addMethod(m); 6. pt.writeFile();
Similar presentations
© 2024 SlidePlayer.com. Inc.
All rights reserved.