¿Es posible crear una clase secundaria que extienda ArrayList? ¿Si es así, cómo?¿Se puede extender ArrayList en Java?
Respuesta
Puede extender cualquier clase que no es definitiva en Java. Una vez dicho esto, debe evitar la herencia si no hay verdadera es una relación. Considera la composición para reutilizar. Lea sobre Liskov substitution principle
¿Por qué no?
import java.util.ArrayList;
public class Foo<T> extends ArrayList<T> {
// ...
}
Sólo pruébelo. La clase no es definitiva, su constructor es público, por lo que puedes. Sin embargo, probablemente no sea una buena idea para un principiante.
La mayoría de las veces, no es una buena idea para nadie. Imagine que agrega alguna funcionalidad y obtenga ExtList1 extends ArrayList
. Una universidad tuya agrega una funcionalidad independiente diferente, por lo que tienes ExtList2 extends ArrayList
. Ahora los quieres a los dos al mismo tiempo y no tienes suerte.
O necesita la misma característica con una implementación de lista base diferente (tal vez LinkedList
, aunque casi siempre es incorrecto usarlo). Nuevamente, sin suerte.
Todos estos son casos en que la delegación gana. No necesita ser más detallado cuando someone has created the base already.
sólo había heredar de ArrayList
, si había una muy buena razón para hacer exactamente esto. Tal vez algunos realmente extremos requisitos de rendimiento basados en los puntos de referencia adecuados de JMH.
Sí, puedes.
public class MyArrayList<E> extends ArrayList<E>
{
}
Sin embargo, no estoy seguro de por qué desea hacerlo.
para cambiarle el nombre de alguna manera más impresionante que ArrayList, por supuesto. -> Lista l = new MySuperAwesomeSandwichMakingConstantTimeLookupSwissArmyList(); – b3bop
hahahahhhahabhahahahaha respuesta humorística ... matón vida b3op –
para poner un punto de interrupción, por ejemplo –
Sí, ArrayList no es final
. Utiliza este enfoque
class Foo<T> extends ArrayList<T>
import java.util.ArrayList;
public class MyArrayList<T> extends ArrayList<T> {
//Add extra or override methods here...
}
ArrayList no es clase final y proporciona constructor público, por lo que técnicamente se puede extender.
Pero la mejor práctica es delegado en lugar de extender. Ver: Decorator pattern
Ummm ... es ** no ** una buena práctica usar delegación en lugar de herencia ** en todas las situaciones **. Debe tomar la decisión caso por caso. –
Como muchos otros han dicho, sí, puede ampliar la clase ArrayList
, pero no es algo que deba hacer normalmente; no se considera una buena práctica en Java.
Soy principalmente un programador de Java, pero en los últimos meses también he estado trabajando en el código C#. Parece que es una expresión común en C# extender las clases de colección estándar si necesita una colección de un tipo específico (en realidad no sé si es una expresión común en general, al menos las personas que escribieron el código I ' estoy trabajando con esto todo el tiempo).
Así que si tienen una clase Person
y necesitan una lista de personas, que habían crean una clase PersonList
que extiende el equivalente C# de ArrayList<Person>
.
La expresión común en Java sería simplemente usar ArrayList<Person>
si necesita una lista de objetos Person
y no crear una subclase específica para esto.
Te aconsejo que sigas la forma común de hacer las cosas en Java, y no crees tus propias subclases de ArrayList
u otras clases de colección.
Hola. Como está sugiriendo no anular la clase, ¿cómo obtendría una devolución de llamada cuando un elemento se agrega a una lista? – Sipty
@Sipty Para algo así, donde realmente desea agregar nuevas funcionalidades en lugar de solo usarlas con un argumento de tipo específico (como en mi descripción anterior), en mi opinión, es legítimo crear una subclase. – Jesper
@Sipty Overriding es una opción, pero imagine que su universidad agrega una funcionalidad independiente diferente, por lo que tiene 'ExtList1 extends ArrayList' y' ExtList2 extends ArrayList'. Ahora los quieres a los dos al mismo tiempo y no tienes suerte. O necesita la misma característica con una implementación de lista base diferente (tal vez 'LinkedList', aunque virtualmente siempre es incorrecto usarla). Estos son todos los casos en que la delegación gana. No es necesario que sea más detallado cuando [alguien ya creó la base] (https://google.github.io/guava/releases/23.0/api/docs/com/google/common/collect/ForwardingList.html). – maaartinus
- 1. ¿Se puede extender (heredar) una clase no abstracta en Java?
- 2. búsqueda en java ArrayList
- 3. Java: ¿Filtrado Eficiente ArrayList?
- 4. ArrayList en Java y entrada
- 5. Java convertir ArrayList en cadena y volver a ArrayList?
- 6. Java - copiar objetos ArrayList
- 7. Construir un ArrayList de cadenas en Java tan simple como se puede en Javascript
- 8. Camel - extender Java DSL?
- 9. Hibernate -> ArrayList no se puede convertir a Set
- 10. ¿Debo extender ArrayList para agregar atributos que no sean nulos?
- 11. Java Modcount (ArrayList)
- 12. Java ArrayList of Arrays?
- 13. ¿Cómo puedo cortar una ArrayList de una ArrayList en Java?
- 14. ¿Puede Prototype extender elementos SVG?
- 15. Java ArrayList Index
- 16. serialización de Java ArrayList
- 17. no puede serializar/Deserialize ArrayList
- 18. Filtrar eficientemente un ArrayList en Java/Android
- 19. ¿Cómo se puede extender una aplicación django conectable?
- 20. ¿Cómo se puede extender Notepad ++ como un IDE para R?
- 21. ¿Cómo se puede extender un protocolo Clojure a otro protocolo?
- 22. Cómo extender tipos inmutables en Java
- 23. Forma correcta de sincronizar ArrayList en java
- 24. Java: ordenar una ArrayList en su lugar
- 25. Eliminar objetos de un ArrayList en Java
- 26. ¿Es posible extender Java Enums?
- 27. Java ArrayList Elija N elementos
- 28. Java ArrayList Error de sintaxis
- 29. Lista de Java vs ArrayList
- 30. ArrayList o declaración de lista en Java
@Rakesh Juyal Sí, lo intenté y me enfrenté a algún problema. Así que solo me estaba asegurando. – nambvarun
publica el problema que enfrentaste? –