Wednesday, 22 September 2010

Identifying Arrays using reflections

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 which 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 the preceding step.
  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.
Name: letters, Type: [Ljava.awt.Button;
Name: codes, Type: [I
Name: rows, Type: [Ljava.awt.TextField;
Name: states, Type: [Z

No comments:

Post a Comment