クラスのフィールド(リフレクトを使用)からジェネリックでクラスをインスタンス化するタイプを使用したいと思います。
注:読みやすくするために必要な例外は除きました。別のクラスのフィールド型を使用してパラメータ化されたクラスをインスタンス化します
public class AClass {
class BClass<T> {
T aMemba;
}
public void AMethod() {
Class c = Class.forName("com.bla.flipper");
Field f = c.getField("flipIt");
// Here is my difficulty, I want to instantiate BClass with the type of
// field 'f' but the compiler won't let me.
Class typeClass = f.getType();
BClass<typeClass> = new BClass<typeClass>();
}
}
私は妥当なものを達成したいですか?どのように私はこの問題を解決することができますか?
ありがとうございます!
BClass<typeClass> = new BClass<typeClass>();
typeClass
コンパイラが知っておくべきものです:あなたは次の行を見ればので、あなたがやろうとしているものは何でも
物事の多くは、「合理的」です...スレッジハンマーを地面にポールを駆動するためではなくとして合理的ですたたき飛ぶ。だから、もしあなたがポールを地面に打ち込んでいるのであれば、スレッジハンマーを使うのが妥当です。フィールドの型が変更される可能性があるクラスのフィールド型に基づいてクラスをインスタンス化する場合は、リフレクションを使用するのが妥当です。 – Kiril
Javaでジェネリックスを使用したい場合は**すぐに**学習する必要があります。http://download.oracle.com/javase/tutorial/java/generics/erasure.html –