Confusión en los genéricos en Java

Chico al azar :

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 Listes la interfaz

public interface List<E> extends Collection<E> 

Y ArrayListes 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 Arraylistse está extendiendo List? En realidad ArrayListestá llevando a cabo List. ¿Cómo se extiende trabajo de palabras clave de este mecanismo implementos? Me estoy confundido que está utilizando extendsy implementsson iguales?

Dmitrii Abramov:

La razón es <X extends T>medio sólo que Xse hereda de T. No hay una sintaxis especial para las interfaces como cuando usted describe en la declaración de la clase de herencia.

ArrayListimplementa la interfaz Listlo 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 Objectcuando no se especifica otra clase padre. Y la clase y la interfaz puede aplicar cualquier cantidad de interfaces.

Espero que esto ayude.

Supongo que te gusta

Origin http://10.200.1.11:23101/article/api/json?id=410157&siteId=1
Recomendado
Clasificación