配列か否かの判定をする、配列の要素のタイプを取得する


通常のプログラムでは不要だが、ライブラリを作るときには、このような処理が必要になることがある.
実行環境はJDK 1.6.

Tips0022.java
package jp.avaj.lib.algo;

import jp.avaj.lib.test.ArTest;
import jp.avaj.lib.test.L;

class Tips0022 {
  public static void main(String[] args) {
    //
    String nonArray = "aaaa";
    Integer[] integerArray = new Integer[]{
      0,1,2,3
    };
    int[] intArray = new int[] {
      0,1,2,3
    };
    String[] strArray = new String[] {
      // サイズゼロ
    };
    //
    // 上記の変数がどんなものかを忘れてしまったので、調べてみる
    //
    // テストケースを開始する
    ArTest.startTestCase("Tips0022");
    //
    boolean result;
    //
    // nonArray
    {
      // 配列であるかを調べる
      result = nonArray.getClass().isArray();
      ArTest.isFalse("nonArray","result",result);
    }
    // integerArray
    {
      // 配列であるかを調べる.
      result = integerArray.getClass().isArray();
      ArTest.isTrue("integerArray","result",result);
      // 配列の要素のタイプを取得する
      L.p("integerArrayの要素="+integerArray.getClass().getComponentType().getName());
      // 配列の要素がprimitiveであるかを調べる
      result = integerArray.getClass().getComponentType().isPrimitive();
      ArTest.isFalse("integerArray","result",result);
    }
    // intArray
    {
      // 配列であるかを調べる
      result = intArray.getClass().isArray();
      ArTest.isTrue("intArray","result",result);
      // 配列の要素のタイプを取得する
      L.p("intArrayの要素="+intArray.getClass().getComponentType().getName());
      // 配列の要素がprimitiveであるかを調べる
      result = intArray.getClass().getComponentType().isPrimitive();
      ArTest.isTrue("intArray","result",result);
    }
    // strArray
    {
      // 配列であるかを調べる
      result = strArray.getClass().isArray();
      ArTest.isTrue("strArray","result",result);
      // 配列の要素のタイプを取得する
      L.p("strArrayの要素="+strArray.getClass().getComponentType().getName());
      // 配列の要素がprimitiveであるかを調べる
      result = strArray.getClass().getComponentType().isPrimitive();
      ArTest.isFalse("strArray","result",result);
    }
    // テストケースを終了する
    ArTest.endTestCase();
  }
}

結果は次のとおり。

Tips0022-result.txt
**** Tips0022 start ****
OK nonArray:result=false
OK integerArray:result=true
integerArrayの要素=java.lang.Integer
OK integerArray:result=false
OK intArray:result=true
intArrayの要素=int
OK intArray:result=true
OK strArray:result=true
strArrayの要素=java.lang.String
OK strArray:result=false
**** Tips0022 summary ****
test count = 7
success    = 7