How to use Class<T> in Java?
Interview Questions practice on Codemia
Over 8,000 real interview questions from top companies, searchable by company and role.
The Class<T> in Java is a powerful mechanism within Java Reflection that represents classes and interfaces in a running Java application. It is a generic class that belongs to the java.lang package. In Java, every type of class (class, interface, enum, annotation, primitive type, or void) is represented as an instance of Class. In simpler terms, Class<T> is a class object that holds the type information of the specified class type T.
Understanding Class<T>
Using Class<T>, developers can obtain detailed information about a class, its constructors, fields, methods, and implement runtime behavior modifications like creating instances and invocation of methods. This capability is crucial for applications that require a dynamic or framework-driven approach, such as in developing web servers, IDEs or test frameworks like JUnit.
To understand it practically, let’s dive into the use of Class<T>. The most common methods to obtain a Class object include:
- Using
TypeName.classsyntax when the type is known at compile time. - Calling
getClass()on an object instance. - Using the
Class.forName()method when the class name is known only at runtime.
Examples and Use Cases
Here is an example demonstrating how to use Class<T>:
In the above examples, strClass and intClass retrieve the Class objects of String and Integer respectively using .class. nameClass is acquired from an instance of String. The Class.forName() method is used to get the Class object for java.util.Random.
Key Methods of Class<T>
newInstance(): Creates a new instance of the class represented by thisClassobject.getMethods(),getDeclaredMethods(): Retrieve methods of the class.getConstructor(),getConstructors(): Access constructors of the class.getField(),getFields(): Retrieve fields of the class.
The below table summarizes the key methods in Class<T>, their purpose, and example usages.
| Method | Description | Example Usages |
newInstance() | Creates a new instance of the class | obj = cls.newInstance() |
getMethods() | Retrieves all public methods | Method[] methods = cls.getMethods() |
getDeclaredMethods() | Retrieves all methods, even private ones | Method[] allMethods = cls.getDeclaredMethods() |
getConstructor() | Retrieves a specific public constructor | Constructor<T> ctor = cls.getConstructor(paramTypes) |
getConstructors() | Retrieves all public constructors | Constructor<?>[] ctors = cls.getConstructors() |
getField() | Retrieves a specific field | Field f = cls.getField("fieldName") |
getFields() | Retrieves all public fields | Field[] fields = cls.getFields() |
Practical Applications
Class<T> is extensively used in scenarios where program behavior needs to be dynamically adapted. This includes:
- Framework Development: In frameworks like Spring, objects are often created dynamically and dependencies injected at runtime.
- Testing Tools: Test frameworks like JUnit use reflection to instantiate test cases and invoke methods annotated with
@Test. - Plugin Architectures: Applications that support plugins might use reflection to load and instantiate these at runtime.
Conclusion
Understanding and utilizing Class<T> effectively can significantly enhance the flexibility and dynamic nature of your Java application, enabling you to write more modular, testable, and adaptable code. However, it's essential to use reflection judiciously as it can lead to code that is hard to understand and maintain. Moreover, reflection operations are not as performant as direct Java method calls and can impact the application's overall performance.
Related reading
- How to use Comparator in Java to sort
- How to use comparison operators like , , on BigDecimal
- How to use ConfigurationProperties with Records?
- How to use Firebase with Spring boot REST Application?
- How to use HikariCP in Spring Boot with two datasources in conjunction with Flyway
- How to use Jackson to deserialise an array of objects
- How to use Java property files?
- How to use java.String.format in Scala?

OOD Fundamentals
Master object-oriented design from first principles, SOLID, design patterns, and classic interview problems with hands-on coding.
View the courseTrack what you have practised
A free account saves your progress, solutions and study plan across every problem on Codemia.
Interview Questions practice on Codemia
Over 8,000 real interview questions from top companies, searchable by company and role.