Java Reflection – Arrays

Since array in Java is also a class so many of the methods in java.lang.Class can be used with the array too. Apart from that in Java Reflection API there is a class java.lang.reflect.Array that has methods for creating new arrays, getting and setting array elements at run time.

Identifying array type using Java Reflection

To identify if any of the class field is of array type you can use Class.isArray() method. Following class is used for example purpose with an array field.

public class Message {
  String msg;
  private int[] codeArray;

  public void displayMessage(){
    System.out.println(msg);
  }
}
import java.lang.reflect.Field;

public class ReflectionDemo {
  public static void main(String[] args) {
    try {
      // get instance of Class
      Class<?> cls = Class.forName("com.knpcode.programs.Message");	
      Field[] fields = cls.getDeclaredFields();
      for (Field f : fields) {
        Class<?> type = f.getType();
        // Looking for array
        if(type.isArray()){
          System.out.println("Array found- " + f.getName());
        }
      }		   		           
    } catch (IllegalArgumentException | ClassNotFoundException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    }
  }
}

Output

Array found- codeArray

Creating new array using Java Reflection

Java Reflection API provides the ability to dynamically create arrays of arbitrary type and dimensions using java.lang.reflect.Array.newInstance() method.

public class ReflectionDemo {
  public static void main(String[] args) {
    int[] codesArray = (int[])Array.newInstance(int.class, 5);
    System.out.println("Array of length " + codesArray.length + " created.");
  }
}

Output

Array of length 5 created.

Get/set elements of array using Java Reflection

For getting and setting elements of an array there are several setters and getters in java.lang.reflect.Array for different types like setByte(), setDouble(), getInt(), getFloat() and there is also generic get() and set() method.

  • set(Object array, int index, Object value)– Sets the passed value in the specified array at the given index.
  • get(Object array, int index)– Returns the value at the sepcified index in the specified array object.
import java.lang.reflect.Array;

public class ReflectionDemo {
  public static void main(String[] args) {
    int[] codesArray = (int[])Array.newInstance(int.class, 5);
    System.out.println("Array of length " + codesArray.length + " created.");
    //using set method to set value
    Array.set(codesArray, 0, 3);
    // Setting values using setInt method
    Array.setInt(codesArray, 1, 10);		
    Array.setInt(codesArray, 2, 4);
    
    // Getting values using getInt and get methods
    System.out.println("Value at index 0- " + Array.get(codesArray, 0));
    System.out.println("Value at index 1- " + Array.getInt(codesArray, 1));
    System.out.println("Value at index 2- " + Array.getInt(codesArray, 2));
  }
}

Output

Array of length 5 created.
Value at index 0- 3
Value at index 1- 10
Value at index 2- 4

Related Posts

  • Java Reflection – Class Fields
  • Java Reflection – Class Methods
  • Java Reflection – Class Constructors
  • Invoke Getters and Setters Using Java Reflection
  • Java Externalizable Interface Example
  • Serialization Proxy Pattern -readResolve() and writeReplace()
  • Java Static Import With Examples
  • Shallow Copy Vs Deep Copy in Java Object Cloning
  • That’s all for the topic Java Reflection – Arrays. If something is missing or you have something to share about the topic please write a comment.


    You may also like

  • Object in Java
  • Difference Between “==” Operator And equals() Method in Java
  • Functional Interface in Java
  • Java ConcurrentSkipListSet With Examples
  • Exclude Bean From Autowiring in Spring
  • Distributed Cache in Hadoop

    Leave a Reply

    Your email address will not be published. Required fields are marked *

    This site uses Akismet to reduce spam. Learn how your comment data is processed.