私はabstract class Abstr<T>
と延長class Ext<T>
を持っています。 Abstr
を知っている必要があります。T
拡張子が初期化されているため、そのタイプを返すことができます。これまでは、コンストラクタに型を与え、それを保存するためにスーパーコンストラクタを呼び出すことでこれを行ってきました。しかし、これは反射でもうまくいくはずです。私が言ったこれまでのように:反射を利用しJavaのスーパークラスのコンストラクタに拡張汎用クラスの汎用タイプを取得しますか?
public abstract class Abstr<T> {
private Class<T> type;
public Abstr(Class<T> _class) {
this.type = _class;
}
}
public class Ext<T> extends Abstr<T> {
public Ext(Class<T> _class) {
super(_class);
}
}
public void someMethod() {
Ext<String> ext = new Ext<String>(String.class);
}
は拡張デフォルトのコンストラクタは、その後の呼び出しコンストラクタの種類を保存する必要があります抽象クラスのデフォルトコンストラクタを呼び出すよう任意のコンストラクタを呼び出すの私を取り除く必要があります。
public Abstr() {
this.type = (Class<D>) this.getClass().getTheTypeParameter(); // something along these lines
}
ありがとう!
質問は?単にそれを試してみるのはなぜですか? – duffymo
質問は、反射でそれを行う方法です..コードのいくつかの行でなければなりません。 – Pete
@Pete: 'String.class'型を' Ext'に実際に渡すことなくそれを行うことはできません。 –