はじめに
javaを使ったアプリ開発でちょくちょくリフレクションを使用するけど、 いままで何となく使用していたので、備忘録変わりに今後複数回に分けて文書に まとめてみようと思う。本文
さて、今回は「第一回: コンストラクタ」編ということでコンストラクタを使用して インスタンスを生成する方法について記載する。 検証用にBeanクラスとReflectionTestクラスを作成する。 ReflectionTestクラスから、Beanクラスで定義したコンストラクタを使用して リフレクションによりインスタンスを生成するといった流れ。Bean.java
public class Bean {
public Bean(){
this.pubVar = "default pubVar";
};
public Bean(String pubVar){
this.pubVar = pubVar;
};
@SuppressWarnings("unused")
private Bean(String[] args) {
this.pubVar = args[0];
}
// instance var
public String pubVar;
}
ReflectionTest.java
import java.lang.reflect.Constructor;
public class ReflectionTest {
public static void main(String []args) throws Exception {
// ①引数なしのコンストラクタを使用してインスタンス生成
Bean bean = Bean.class.newInstance();
System.out.println(bean.pubVar); // default pubVar
// ②引数ありのコンストラクタを使用してインスタンス生成
bean = Bean.class
.getConstructor(String.class)
.newInstance("引数ありコンストラクタの検証");
System.out.println(bean.pubVar); // 引数ありコンストラクタの検証
// ③private コンストラクタを使用してインスタンス生成
Class<?>[] params = {String[].class};
Constructor<Bean> constructor = Bean.class
.getDeclaredConstructor(params);
constructor.setAccessible(true);
bean = constructor
.newInstance(new Object[]{new String[]{"プライベートコンストラクタの検証"}});
System.out.println(bean.pubVar); // プライベートコンストラクタの検証
}
}