Program to demonstrate how to determine fields in a class using Java Reflection API
package com.hubberspot.reflection;
import java.lang.reflect.Field;
// Creating two simple Java classes such as
// Car and Ferrari. Giving it a parent and child
// relationship. As Ferrari is a Car
class Car
{
// Creating two public fields in Car
public int tyres;
public int doors;
}
class Ferrari extends Car
{
// Creating two fields in Ferrari which are
// protected and private
protected String engine;
private int windows;
}
public class ClassFieldsFinding {
public static void main(String[] args) {
// Creating a instance of class Class of type Ferrari
Class ferrariClass = Ferrari.class;
// In order to get public fields name and type at
// runtime we
Field [] ferrariFields = ferrariClass.getFields();
System.out.println("Ferrari has following fields : ");
for(int i = 0; i < ferrariFields.length; i++) {
// Field class has a method by name getName()
// which returns back the name of the field
String fieldName = ferrariFields[i].getName();
// Field class has a method by name getType()
// which returns instance of Class of the type
Class fieldType = ferrariFields[i].getType();
// Calling the getName() returns us back the
// name of the type
String fieldTypeName = fieldType.getName();
System.out.println(i+1 + ". Field Name : " + fieldName +
" Field Type : " +fieldTypeName);
}
// getFields method returns us the public fields of the
// class. In order to get the name of private and protected
// fields of the class and its superclass we usually
// call getDeclaredFields() method on the Class instance
ferrariFields = ferrariClass.getDeclaredFields();
for(int i = 0; i < ferrariFields.length; i++) {
String fieldName = ferrariFields[i].getName();
// It returns back the name of fields
// which are private and protected
Class fieldType = ferrariFields[i].getType();
String fieldTypeName = fieldType.getName();
System.out.println(i+3 + ". Field Name : " + fieldName +
" Field Type : " +fieldTypeName);
}
}
}
Output of the program :
