私は、拡張コレクションをパラメータ化するにはどうすればよいです
-
21-08-2019 - |
質問
私は多くの成功なしでArrayListクラスを拡張しようとしてきました。私はそれを拡張し、それをパラメータ化することができるようにしたい。
は、
のようなものを持っているので、通常、ArrayList<SomeObject> list = new ArrayList<SomeObject>();
私が欲しい
MyList<SomeObject> list = new MyList<SomeObject>();
単にArrayListには動作しません拡張ます。
public class MyList extends ArrayList ...
私はエラーを取得し、それを使用してみてください。
型MYLISTは、汎用ではありません。それ 引数をパラメータ化することはできません
私は
のバリエーションを試してみましたpublic class MyList extends ArrayList<Object>
public class MyList<SubObject> extends ArrayList<Object>
私はクラス名の後ろにサブオブジェクトを使用する場合は、いいえ成功し、動作するように見えますが、何らかの理由でサブオブジェクトクラスのメソッドを隠します。
この作業の権利を取得する方法上の任意の考えや提案が高く評価されます。
解決
あなたはArrayList
の型パラメータの型を指定する必要があります。ジェネリック型パラメータの場合、T
はかなり一般的です。コンパイラはT
が何であるかを知らないので、あなたはそれが渡された型を持つことができMyList
するタイプのパラメータを追加する必要がありますしたがって、あなたが得る:ます。
public class MyList<T> extends ArrayList<T>
また、あなたはList
を実装し、ArrayList
に委任するのではなく、ArrayList
から継承することを検討してください。 "クラス継承上にオブジェクト組成物を支持している。[のデザインパターン PG 20]"
他のヒント
public class MyList<T>
extends ArrayList<T>
{
}
MyList<SomeObject> list = new MyList<SomeObject>();
または
public class MyList
extends ArrayList<SomeObject>
{
}
MyList list = new MyList();
あなたはArrayListのを拡張するべきではありません、拡張 AbstractList の代わります:
public class MyList<T> extends AbstractList<T> {
public int size() {...}
public T get(int index) {...}
}
所属していません StackOverflow