menu
書いてる野郎
orebike@gmail.com
よくフレームワーク等に付属してくるクラスのメソッドにあるクラス情報自体を引数に取るメソッドの作り方
クラス情報を引数に取るメソッドを持つクラスはこのように作る
public class Hoge<T>{ }
一部のメソッドが引数でクラス情報を使うだけなのだが、 このように型情報に対象のクラスの型を含めて書く(多分書かなくてもいいけど、書いたほうが楽だし書く状況のほうが圧倒的に多い)。
クラス情報を引数に取るメソッドを持つクラスはこのように作る。
public class Hoge<T>{ public void piyo(Class<T> klazz){ } }
Class クラスの情報を受ける引数をとる。このメソッドはこのように、 対象のクラスの static class フィールドから引き出して使う
hoge.piyo(Fuga.class);
コンストラクタで書くならばこんな感じになる。Classクラス型のフィールドに保持できる。
public class Hoge<T>{ private Class<T> klazz public Hoge(Class<T> klazz){ this.klazz = klazz; } }
T
を用いることでで文法的に型情報が使えるようになっているのでこのT
型の変数で受けることができ、Class クラスのインスタンスから各種操作ができるのでこいつを組み合わせると作れる。
T t = this.klazz.newInstance();
作れるのでリターンもしたいならシグネチャはこうなる
public T getInstance(){ return this.klazz.newInstance(); }