Trail: The Reflection API
Lesson: Working with Arrays
Identifying Arrays
Home Page > The Reflection API > Working with Arrays
Identifying Arrays
If you aren't certain that a particular object is an array, you can check it with the Class.isArray method. Let's take a look at an example.

The sample program that follows prints the names of the arrays that are encapsulated in an object. The program performs these steps:

  1. It retrieves the Class object that represents the target object.
  2. It gets the Field objects for the Class object retrieved in step 1.
  3. For each Field object, the program gets a corresponding Class object by invoking the getType method.
  4. To verify that the Class object retrieved in the preceding step represents an array, the program invokes the isArray method.

Here's the source code for the sample program:

import java.lang.reflect.*;
import java.awt.*;

class SampleArray {

   public static void main(String[] args) {
      KeyPad target = new KeyPad();
      printArrayNames(target);
   }

   static void printArrayNames(Object target) {
      Class targetClass = target.getClass();
      Field[] publicFields = targetClass.getFields();
      for (int i = 0; i < publicFields.length; i++) {
         String fieldName = publicFields[i].getName();
         Class typeClass = publicFields[i].getType();
         String fieldType = typeClass.getName();
         if (typeClass.isArray()) {
            System.out.println("Name: " + fieldName + 
               ", Type: " + fieldType);
         }
      }
   }
}

class KeyPad {

   public boolean alive;
   public Button power;
   public Button[] letters; 
   public int[] codes;
   public TextField[] rows;
   public boolean[] states;
}
The output of the sample program follows. Note that the left bracket indicates that the object is an array. For a detailed description of the type descriptors that getName returns, see section 4.3.1 of The Java Virtual Machine Specification.
Name: letters, Type: [Ljava.awt.Button;
Name: codes, Type: [I
Name: rows, Type: [Ljava.awt.TextField;
Name: states, Type: [Z
Previous page: Working with Arrays
Next page: Retrieving Component Types