Javaのメソッドの引数の型を調べるには、

Method methods[] = CheckArgType.class.getDeclaredMethods();
for(Method method : methods){
	Class< ? extends Object> methodArgs[] = method.getParameterTypes();
	
	System.out.println("====== " + method.getName() + "===========");
	for(Class argClz : methodArgs){
		System.out.println(argClz.getName());
	}
}

のようにすればいい。
しかしながら、引数が配列である場合、
つまり、下記のようなクラスでは

public class CheckArgType {

	
	public void method_1(int arg1,String arg2){
		
	}
	
	public void method_2(int args[]){
		
	}
	
	public static void main(String[] args) {
		
	}

}

以下、実行時の出力

====== main===========
[Ljava.lang.String;
====== method_1===========
int
java.lang.String
====== method_2===========
[I

のように、”[I”とか”[L”とか、表示されてしまう。
これはこれでJNIとかをやっていれば、それでいいかとも思うが、
やはり、ここはキチンとStringなのか、String[]なのか、intなのかint[]なのかをみたい。

そこで、

public static void main(String[] args) {

	Method methods[] = CheckArgType.class.getDeclaredMethods();
	for(Method method : methods){
		Class< ? extends Object> methodArgs[] = method.getParameterTypes();
		
		System.out.println("====== " + method.getName() + "===========");
		for(Class argClz : methodArgs){
			if(argClz.isArray()){
				System.out.println(argClz.getComponentType() + "[]");
			}
			else{
				System.out.println(argClz.getName());
			}
		}
	}

}

これで先ほどの出力は

====== main===========
class java.lang.String[]
====== method_1===========
int
java.lang.String
====== method_2===========
int[]

のようになった。

まあ、通常、このようなメソッドの引数がなんなのかを調べて実行するなんてことはないが、
自作RESTフレームワークでやっている都合上、調べて、そのための引数のオブジェクトを作成する必要が出た。

本当は、Listのように定義したGenericで指定された型をとりたいな-と思ったが、
これはよくよく考えたら、必ず指定される必要があるわけでもないし、私の記憶ではコンパイラチェックだったと思う。
なので、ランタイムでのチェックはJavaのバイトコードレベルでの話にすればもしかしたらできるのかもしれないが、
そこまで必要とは思わないので、それでやめた。

お仕事のご依頼・相談を承ります
この記事に関連するお仕事のご依頼やご相談をお待ちしております。 詳しくは、こちら

Leave a Reply

お仕事のご依頼・相談
この記事に関連するお仕事のご依頼やご相談をお待ちしております。 詳しくは、こちら
ソフトウェア&ライブラリ




ライブラリ
airxmail(en)
AIR版メール送受信ライブラリ
airxzip
AIR版ZIP圧縮・解凍ライブラリ
執筆書籍
本、雑誌等

WEB記事:CodeZine
執筆記事はこちら
カレンダー
2012年4月
« 3月   5月 »
 1
2345678
9101112131415
16171819202122
23242526272829
30  

カスタム検索
RSS
Add to Google < !–adsense–>
アーカイブ
カテゴリ
にほんブログ村 IT技術ブログへ