リストのタイプが実行時にのみ知られている一般的なリストを生成したい(そのリストを作成するオブジェクトのタイプ)。
完全な説明:
この機能を抽象クラスに実装したいので、実行前に親クラスを知っています。
それを行う方法がわかりません。
Class myClass = getClass().getSuperclass();
LinkedList<myClass> list = new LinkedList<myClass>();
動作しません。何か案は?
または、次のように書くこともできます。
List<Object> list = new LinkedList<Object>();
ジェネリックは主にコンパイル時の機能であるため、このコンテキストでは意味がありません。
あなたはただ書くことができます
List list = new LinkedList();
あなたがそれを使うことができるなら、私は通常ArrayListを好みます。;)
単純にNon-Generics
ArrayListを使用する
ArrayList arrList = new ArrayList();
を使用することもできます<?>
の原理を示しているので、を使用してList
考えるとよいでしょう。"Program in Interface rather than implementation"
別のオプションは、抽象クラスを拡張クラスの型でパラメーター化することです。これは少し過剰に設計されていますが、動作するはずです:
package test;
import java.util.ArrayList;
import java.util.List;
public class AbstractListHolder<T> {
private List<T> list = new ArrayList<T>();
List<T> getList() {
return list;
}
}
class ListHolder extends AbstractListHolder<ListHolder> {
void doSomething() {
getList().add(this);
}
}