Pregunta

He intentado ampliar la clase ArrayList sin mucho éxito.Quiero ampliarlo y poder parametrizarlo.

Entonces normalmente tienes algo como

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

Quiero

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

Simplemente extender ArrayList no funciona.

public class MyList extends ArrayList ...

Cuando intento usarlo me sale el error

El tipo MyList no es genérico;No se puede parametrizar con argumentosu003CSomeObject>

He probado variaciones de

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

sin éxito, si uso el subobjeto detrás del nombre de la clase, parece funcionar, pero oculta métodos en la clase del subobjeto por alguna razón.

Se agradece cualquier idea o sugerencia sobre cómo hacer que esto funcione correctamente.

¿Fue útil?

Solución

Debe especificar un tipo para el ArrayListEl parámetro de tipo.Para parámetros de tipo genérico, T es bastante común.Dado que el compilador no sabe qué T es decir, necesita agregar un parámetro de tipo a MyList que puede tener el tipo pasado.Así, obtienes:

public class MyList<T> extends ArrayList<T>

Además, es posible que desee considerar implementar List y delegar en un ArrayList, en lugar de heredar de ArrayList."Favorezca la composición de objetos sobre la herencia de clases.[Patrones de diseño pág.20]"

Otros consejos

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

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

o

public class MyList
    extends ArrayList<SomeObject>
{
}

MyList list = new MyList();

No debe extenderse ArrayList, se extienden AbstractList lugar:

public class MyList<T> extends AbstractList<T> {
    public int size() {...}
    public T get(int index) {...}
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top