DOC PREVIEW
Penn CIT 597 - Reflection

This preview shows page 1-2-22-23 out of 23 pages.

Save
View full document
View full document
Premium Document
Do you want full access? Go Premium and unlock all 23 pages.
Access to all documents
Download any document
Ad free experience
View full document
Premium Document
Do you want full access? Go Premium and unlock all 23 pages.
Access to all documents
Download any document
Ad free experience
View full document
Premium Document
Do you want full access? Go Premium and unlock all 23 pages.
Access to all documents
Download any document
Ad free experience
View full document
Premium Document
Do you want full access? Go Premium and unlock all 23 pages.
Access to all documents
Download any document
Ad free experience
Premium Document
Do you want full access? Go Premium and unlock all 23 pages.
Access to all documents
Download any document
Ad free experience

Unformatted text preview:

ReflectionJava looking at JavaWhat is reflection for?BlueJThe Class classGetting the class nameGetting all the superclassesGetting the class modifiers IGetting the class modifiers IIGetting interfacesExamining classes and interfacesGetting FieldsUsing Fields, IUsing Fields, IIConstructorsMethodsMethod methods, IMethod methods, IIArrays IArrays IIArrays IIIConcluding commentsThe EndReflectionJava looking at Java•One of the unusual capabilities of Java is that a program can examine itself–You can determine the class of an object –You can find out all about a class: its access modifiers, superclass, fields, constructors, and methods–You can find out what what is in an interface–Even if you don’t know the names of things when you write the program, you can:•Create an instance of a class•Get and set instance variables •Invoke a method on an object•Create and manipulate arrays•I guess this is called “reflection” because it’s as if a Java program could “look in a mirror” at itselfWhat is reflection for?•In “normal” programs you don’t need reflection•You do need reflection if you are working with programs that process programs•Typical examples:–A class browser–A debugger–A GUI builder–An IDE, such as BlueJ or Forté–A program to grade student programsBlueJ•BlueJ is a Java program—what can it do?–It can compile a program (easy—just a system call)–It can load in your program after compilation–It can find out what classes you have, and what their constructors and methods are–It can execute your main method–It can create objects for you even without running your main method–It can send messages (call methods) to those objects and display the results•All these capabilities, except compilation, are done with reflectionThe Class class•To find out about a class, first get its Class object–If you have an object obj, you can get its class object withClass c = obj.getClass();–You can get the class object for the superclass of a Class c withClass sup = c.getSuperclass();–If you know the name of a class (say, Button) at compile time, you can get its class object withClass c = Button.class;–If you know the name of a class at run time (in a String variable str), you can get its class object withClass c = class.forName(str);Getting the class name•If you have a class object c, you can get the name of the class with c.getName()•getName returns the fully qualified name; that is, Class c = Button.class; String s = c.getName(); System.out.println(s);will print java.awt.Button•Class Class and its methods are in java.lang, which is always imported and availableGetting all the superclasses•getSuperclass() returns a Class object (or null if you call it on Object, which has no superclass)•The following code is from the Sun tutorial: static void printSuperclasses(Object o) { Class subclass = o.getClass(); Class superclass = subclass.getSuperclass(); while (superclass != null) { String className = superclass.getName(); System.out.println(className); subclass = superclass; superclass = subclass.getSuperclass(); }}Getting the class modifiers I•A Class object has an instance method getModifiers() that returns an int•To “decipher” the int result, we need methods of the Modifier class, which is in java.lang.reflect, so: import java.lang.reflect.*;•Now we can do things like:if (Modifier.isPublic(m)) System.out.println("public");Getting the class modifiers II•Modifier contains these methods (among others):–public static boolean isAbstract(int)–public static boolean isFinal(int)–public static boolean isInterface(int)–public static boolean isPrivate(int)–public static boolean isProtected(int)–public static boolean isPublic(int)–public static String toString(int)•This will return a string such as"public final synchronized strictfp"Getting interfaces•A class can implement zero or more interfaces•getInterfaces() returns an array of Class objects•More code from Sun:static void printInterfaceNames(Object o) {Class c = o.getClass();Class[] theInterfaces = c.getInterfaces();for (int i = 0; i < theInterfaces.length; i++) {String interfaceName = theInterfaces[i].getName();System.out.println(interfaceName); }}•Note that zero-length arrays are perfectly legal in JavaExamining classes and interfaces•The class Class represents both classes and interfaces•To determine if a given Class object c is an interface, use c.isInterface()•To find out more about a class object, use:–getModifiers()–getFields() // "fields" == "instance variables"–getConstructors()–getMethods()–isArray()Getting Fields•public Field[] getFields() throws SecurityException–Returns an array of public Fields (variables)–The length of the array may be zero–The fields are not returned in any particular order–Both locally defined and inherited instance variables are returned, but not static variables•public Field getField(String9name) throws NoSuchFieldException, SecurityException–Returns the named public Field–If no immediate field is found, the superclasses and interfaces are searched recursivelyUsing Fields, I•If f is a Field object, then–f.getName() returns the simple name of the field–f.getType() returns the type (Class) of the field–f.getModifiers() returns the Modifiers of the field–f.toString() returns a String containing access modifiers, the type, and the fully qualified field name•Example: public java.lang.String Person.name–f.getDeclaringClass() returns the Class in which this field is declaredUsing Fields, II• The fields of a particular object obj may be accessed with:–boolean f.getBoolean(obj), int f.getInt(obj), double f.getDouble(obj), etc., return the value of the field, assuming it is that type or can be widened to that type–Object f.get(obj) returns the value of the field, assuming it is an Object–void f.set(obj, value), void f.setBoolean(obj, bool), void f.setInt(obj, i), void f.getDouble(obj, d), etc. set the value of a fieldConstructors•If c is a Constructor object, then–c.getName() returns the name of the constructor, as a String (this is the same as the name of the class)–c.getDeclaringClass() returns the Class in which this constructor is declared–c.getModifiers() returns the Modifiers of the constructor–c.getParameterTypes() returns an array of Class objects, in declaration order–c.newInstance(Object[]9initargs) creates and


View Full Document

Penn CIT 597 - Reflection

Documents in this Course
DOM

DOM

21 pages

More DOM

More DOM

11 pages

Rails

Rails

33 pages

DOM

DOM

21 pages

RELAX NG

RELAX NG

31 pages

RELAX NG

RELAX NG

31 pages

RELAX NG

RELAX NG

31 pages

RELAX NG

RELAX NG

31 pages

Rake

Rake

12 pages

Ruby

Ruby

58 pages

DOM

DOM

21 pages

Tomcat

Tomcat

16 pages

DOM

DOM

21 pages

Servlets

Servlets

29 pages

Logging

Logging

17 pages

Html

Html

27 pages

DOM

DOM

22 pages

RELAX NG

RELAX NG

30 pages

Servlets

Servlets

28 pages

XHTML

XHTML

13 pages

DOM

DOM

21 pages

DOM

DOM

21 pages

Servlets

Servlets

26 pages

More CSS

More CSS

18 pages

Servlets

Servlets

29 pages

Logging

Logging

17 pages

Load more
Download Reflection
Our administrator received your request to download this document. We will send you the file to your email shortly.
Loading Unlocking...
Login

Join to view Reflection and access 3M+ class-specific study document.

or
We will never post anything without your permission.
Don't have an account?
Sign Up

Join to view Reflection 2 2 and access 3M+ class-specific study document.

or

By creating an account you agree to our Privacy Policy and Terms Of Use

Already a member?