Estoy aprendiendo genéricos en java.At primero hicimos un ArrayList de enteros y hemos añadido un valor en la lista.
import java.util.ArrayList;
import java.util.List;
public class GenericsRunner {
public static void main(String[] args) {
ArrayList<Integer> numbers=new ArrayList<>();
numbers.add(1);
}
static <X extends List> void duplicate(X list) {
list.addAll(list);
}
}
El duplicado método puede ser utilizado por aquellos objetos que están ampliando List
. Pero, puesto que List
es la interfaz
public interface List<E> extends Collection<E>
Y ArrayList
es implemetingList
public class ArrayList<E> extends AbstractList<E>
implements List<E>, RandomAccess, Cloneable,
java.io.Serializable
Me quedé atrapado en este punto. Extiende es utilizado por aquellas clases que hereda la propiedad de la superclase. Pero, ¿cómo Arraylist
se está extendiendo List
? En realidad ArrayList
está llevando a cabo List
. ¿Cómo se extiende trabajo de palabras clave de este mecanismo implementos? Me estoy confundido que está utilizando extends
y implements
son iguales?
La razón es <X extends T>
medio sólo que X
se hereda de T
. No hay una sintaxis especial para las interfaces como cuando usted describe en la declaración de la clase de herencia.
ArrayList
implementa la interfaz List
lo que significa que se hereda de List
, por lo que es adecuado para el tipo genérico <X extends List>
.
En Java cualquier clase puede extender una sola clase. Por defecto es Object
cuando no se especifica otra clase padre. Y la clase y la interfaz puede aplicar cualquier cantidad de interfaces.
Espero que esto ayude.