This program demonstrates the use of reflection for manipulating arrays : Array Reflection « Reflection « Java






This program demonstrates the use of reflection for manipulating arrays

This program demonstrates the use of reflection for manipulating arrays
 
/*
 This program is a part of the companion code for Core Java 8th ed.
 (http://horstmann.com/corejava)

 This program is free software: you can redistribute it and/or modify
 it under the terms of the GNU General Public License as published by
 the Free Software Foundation, either version 3 of the License, or
 (at your option) any later version.

 This program is distributed in the hope that it will be useful,
 but WITHOUT ANY WARRANTY; without even the implied warranty of
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 GNU General Public License for more details.

 You should have received a copy of the GNU General Public License
 along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */

import java.lang.reflect.Array;

/**
 * This program demonstrates the use of reflection for manipulating arrays.
 * 
 * @version 1.01 2004-02-21
 * @author Cay Horstmann
 */
public class ArrayGrowTest {
  public static void main(String[] args) {
    int[] a = { 1, 2, 3 };
    a = (int[]) goodArrayGrow(a);
    arrayPrint(a);

    String[] b = { "Tom", "Dick", "Harry" };
    b = (String[]) goodArrayGrow(b);
    arrayPrint(b);

    System.out.println("The following call will generate an exception.");
    b = (String[]) badArrayGrow(b);
  }

  /**
   * This method attempts to grow an array by allocating a new array and copying
   * all elements.
   * 
   * @param a
   *          the array to grow
   * @return a larger array that contains all elements of a. However, the
   *         returned array has type Object[], not the same type as a
   */
  static Object[] badArrayGrow(Object[] a) {
    int newLength = a.length * 11 / 10 + 10;
    Object[] newArray = new Object[newLength];
    System.arraycopy(a, 0, newArray, 0, a.length);
    return newArray;
  }

  /**
   * This method grows an array by allocating a new array of the same type and
   * copying all elements.
   * 
   * @param a
   *          the array to grow. This can be an object array or a primitive type
   *          array
   * @return a larger array that contains all elements of a.
   */
  static Object goodArrayGrow(Object a) {
    Class cl = a.getClass();
    if (!cl.isArray())
      return null;
    Class componentType = cl.getComponentType();
    int length = Array.getLength(a);
    int newLength = length * 11 / 10 + 10;

    Object newArray = Array.newInstance(componentType, newLength);
    System.arraycopy(a, 0, newArray, 0, length);
    return newArray;
  }

  /**
   * A convenience method to print all elements in an array
   * 
   * @param a
   *          the array to print. It can be an object array or a primitive type
   *          array
   */
  static void arrayPrint(Object a) {
    Class cl = a.getClass();
    if (!cl.isArray())
      return;
    Class componentType = cl.getComponentType();
    int length = Array.getLength(a);
    System.out.print(componentType.getName() + "[" + length + "] = { ");
    for (int i = 0; i < Array.getLength(a); i++)
      System.out.print(Array.get(a, i) + " ");
    System.out.println("}");
  }
}

   
  








Related examples in the same category

1.Creating an Array: An array of 10 ints.
2.Creating an Array: An array of 10 int-arrays.
3.Creating an Array: A 10x20 2-dimensional int array.
4.Getting and Setting the Value of an Element in an Array Object
5.Array Reflection: name and typeArray Reflection: name and type
6.Array Reflection: getComponentType()Array Reflection: getComponentType()
7.Array Reflection: create instanceArray Reflection: create instance
8.Array Reflection: get lengthArray Reflection: get length
9.Array Reflection: Multi Array Reflection
10.Using reflection to check array type and length
11.Using reflection to create, fill, and display an array
12.Getting the Length and Dimensions of an Array Object
13.Determining If an Object Is an Array
14.Getting the Component Type of an Array Object
15.Check if the given object is an array (primitve or native).
16.return an Object array for the given object.