Types, Reflection, and Dynamic Loading
The
java.lang.Class
class represents data
types in Java and, along with the classes in the
java.lang.reflect
package, gives Java programs the
capability of introspection (or self-reflection); a Java class can
look at itself, or any other class, and determine its superclass,
what methods it defines, and so on.
Class Objects
You can obtain a Class
object in Java in several
ways:
// Obtain the Class of an arbitrary object o Class c = o.getClass(); // Obtain a Class object for primitive types with various predefined constants c = Void.TYPE; // The special "no-return-value" type c = Byte.TYPE; // Class object that represents a byte c = Integer.TYPE; // Class object that represents an int c = Double.TYPE; // etc; see also Short, Character, Long, Float // Express a class literal as a type name followed by ".class" c = int.class; // Same as Integer.TYPE c = String.class; // Same as "dummystring".getClass() c = byte[].class; // Type of byte arrays c = Class[][].class; // Type of array of arrays of Class objects
Reflecting on a Class
Once you have a Class
object, you can perform some
interesting reflective operations with it:
import java.lang.reflect.*; Object o; // Some unknown object to investigate Class c = o.getClass(); // Get its type // If it is an array, figure out its base type while (c.isArray()) c = c.getComponentType(); // If c is not a primitive type, print its class hierarchy if (!c.isPrimitive()) { for(Class s = c; s != null; s = s.getSuperclass()) ...
Get Java in a Nutshell, 5th Edition now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.