Pergunta

Eu tenho tentado estender a classe ArrayList sem muito sucesso. Eu quero estendê-lo, e ser capaz de parametrizar-lo.

Então, normalmente você tem algo parecido

ArrayList<SomeObject> list = new ArrayList<SomeObject>();

Eu quero

MyList<SomeObject> list = new MyList<SomeObject>();

Simplesmente estendendo ArrayList não funciona.

public class MyList extends ArrayList ...

O quando tento usá-lo eu recebo o erro

O tipo MyList não é genérico; isto não pode ser parametrizada com argumentos

Eu tentei variações de

public class MyList extends ArrayList<Object>
public class MyList<SubObject> extends ArrayList<Object>

sem sucesso, Se eu usar o sub-objeto por trás do nome da classe que parece trabalho, mas esconde métodos na classe sub-objeto por algum motivo.

Todos os pensamentos ou sugestões sobre como obter esse trabalho direito são apreciados.

Foi útil?

Solução

Você precisa especificar um tipo de parâmetro de tipo da ArrayList. Para parâmetros de tipo genérico, T é bastante comum. Desde o compilador não sabe o que um T é, você precisa adicionar um parâmetro de tipo para MyList que podem ter o tipo passou no Assim, você obtém:.

public class MyList<T> extends ArrayList<T>

Além disso, você pode querer considerar a implementação de List e delegar a um ArrayList, ao invés de herdar de ArrayList. "Composição de objetos Favor sobre herança de classe. [ Design Patterns pg. 20]"

Outras dicas

public class MyList<T> 
    extends ArrayList<T>
{
}

MyList<SomeObject> list = new MyList<SomeObject>();

ou

public class MyList
    extends ArrayList<SomeObject>
{
}

MyList list = new MyList();

Você não deve se estender ArrayList, estender AbstractList vez:

public class MyList<T> extends AbstractList<T> {
    public int size() {...}
    public T get(int index) {...}
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top