あなたは抽象的な静的メソッドを使用できないことを知っています。私はまた、MyList<T extends ObjectWithId>
と言うとき、私のオブジェクトはサブクラスでオーバーライドされる静的メソッドを持つ抽象クラスを持っているので、Tは実行時に存在しないので、静的メソッドをオーバーライドすることは役に立たないことがわかりますObjectWithId
の静的メソッドはサブクラスの代わりに呼び出されます。だからここJavaのジェネリックで静的/静的オーバーライドメソッドを抽象化する代わりに
は私が持っているものです:
ObjectWithId
がある
class PersistentList<T extends ObjectWithId> implements List<T>{
}
:
abstract ObjectWithId{
public abstract long getId();
}
今、問題はその名の、私のPersistentListは、ハードディスクに保存されることを意図していることで、実際には保持しているオブジェクトのIDのみを格納します。私はPersistentList
の
@Override
public T get(int index) {
}
メソッドを実装したいときに私のプログラムは、それがindex
のために保存されたid
を使用してObjectWithId
の各サブクラスで実装される静的メソッドobjectForId(long id)
を呼び出すようにするために今、私が欲しいのです。インスタンスメソッドが存在しないため、インスタンスメソッドは使用できません。ポイントは、id
を使用してハードディスクからインスタンスをロードすることです。だから、どのように実装する必要がありますか? 1つのオプションは、ObjectWithId
に各サブクラスで実装されたObjectWithId(long id)
のコンストラクタを持つことですが、Tは実行時に存在しません。どのようにインスタンス化するのですか?私はPersistentList
のコンストラクタにClass<T>
オブジェクトを渡すことができますが、コンストラクタに引数がない場合は好きですが、明示的に右に渡さずにTのクラスを取得する方法はないと思いますか?
私はこれがより良い説明であることを望みます。私が始めたあいまいな質問を申し訳ありません。
あなたの質問は本当に「ジェネリックパラメータのタイプを取得するにはどうすればいいですか」ですか?そうであれば、既にこれについて数十もの質問があります。 http://stackoverflow.com/questions/182636/how-to-determine-the-class-of-a-generic-type、http://stackoverflow.com/questions/1372432/how-to-obtain-class- instance-generic-argument-type、http://stackoverflow.com/questions/2223233/how-to-get-generics-class、等 –