Java/クラス情報を利用するメソッドを作る

Java/クラス情報を利用するメソッドを作る

よくフレームワーク等に付属してくるクラスのメソッドにあるクラス情報自体を引数に取るメソッドの作り方

クラス情報を引数に取るメソッドを持つクラス

クラス情報を引数に取るメソッドを持つクラスはこのように作る

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();
}

対象のクラスのフィールドに書き込む

T t = this.klazz.newInstance();
for(Field f : this.klazz.getFields()){
    if(f.getClass().equals(String.class)){
        f.set(t, "hogehoge");
    }else if(f.getClass().equals(Integer.class)){
        f.set(result, 123);
    }
}
java/method_use_class_info.txt · 最終更新: 2015-11-13 11:11 by ore