質問

私は多くの成功なしで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) {...}
}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top