Aprendizaje y actualización de Java: comprensión de los genéricos de Java (2)

Comprensión complementaria de los genéricos: los genéricos usan parámetros como variables para reutilizar el mismo código comercial de manera más flexible y eficiente. Los genéricos pueden usar referencias de objetos para lograr la "arbitrariedad" de los parámetros. La desventaja de la "arbitrariedad" es que Realice una conversión de tipo coercitiva explícita, y esta conversión requiere que el desarrollador prediga los tipos de parámetros reales. En el caso de un error de conversión de tipo forzado, es posible que el compilador no genere un error y se produzca una excepción durante la operación, lo que constituye un riesgo de seguridad en sí mismo.
Entonces, la ventaja de los genéricos es que se puede verificar la seguridad de tipos en tiempo de compilación, y todas las conversiones son automáticas e implícitas.

¿Especial énfasis en la comprensión de los comodines genéricos? ,? Representa un marcador de posición, que indica que el tipo se especificará en el futuro.

Aquí hay dos castañas:
1. Defina e imprima un elemento de colección

    public static void print(List<?> list){
        list.add("test");  //报错,这里对未来使用对类型是无法确定对
        for (Object o: list
             ) {
            System.out.println(o);
        }
    }

2. La categoría principal Animal y varias subcategorías, como perros, gatos, etc.

    static int countLegs (List<? extends Animal > animals ) {
    int retVal = 0;
    for ( Animal animal : animals )
    {
        retVal += animal.countLegs();
    }
    return retVal;
}

static int countLegs1 (List< Animal > animals ){
    int retVal = 0;
    for ( Animal animal : animals )
    {
        retVal += animal.countLegs();
    }
    return retVal;
}

public static void main(String[] args) {
    List<Dog> dogs = new ArrayList<>();
     // 不会报错
    countLegs( dogs );
    // 报错
    countLegs1(dogs);
}

Por lo tanto, para los tipos que no están seguros o que no se preocupan por la operación real, puede utilizar comodines sin restricciones (es decir, un signo de interrogación entre paréntesis angulares), lo que significa que puede contener cualquier tipo. Al igual que el método countLegs, la sesión anterior es limitada, pero no le importa cuál es el tipo específico, por lo que se pueden admitir todas las subclases de la pasada en Animal y no se informará ningún error. Pero countLegs1 no funcionará.

Supongo que te gusta

Origin blog.51cto.com/13238147/2556508
Recomendado
Clasificación