Genéricos - ¿Por qué son las variables de tipo de clase no es válida en el contexto estático?

Java impaciente:

Estoy aprendiendo genéricos de Java a partir de un libro. El libro dice que "Variables de clase de tipo no son válidos en el contexto estático" y lo explica con el siguiente ejemplo.

Considere una clase genérica con variables de tipo, como la entrada. No se pueden utilizar las variables de tipo K y V con variables o métodos estáticos. Por ejemplo, el siguiente no funciona:

public class Entry<K, V> {
    // Compiler error - V in static context ("Entry.this' cannot be referenced from a static context")
    private static V defaultValue;

    // Compiler error - V in static context ("Entry.this' cannot be referenced from a static context")
    public static void setDefault(V value) {
        defaultValue = value;
    }
}

Después de todo, los medios de borrado de tipo sólo hay una variable de este tipo o método en la clase de Entrada borrado, y no uno para cada K y V.

No entiendo la explicación anterior. Intenté crear el mismo código para K también y tengo los mismos errores de compilación. ¿Por qué es ilegal el código anterior?

Joni:

Los diseñadores de genéricos de Java eligieron para ponerlo en práctica utilizando un mecanismo llamado "tipo de borrado". Esto significa que las especialidades genéricas como Entry<String,Integer>y Entry<Integer,String>no existen como clases separadas. Los parámetros de tipo se borran.

Una vez que borra los parámetros de tipo de Entry<String,Integer>y Entry<Integer,String>uno se queda con sólo la Entryclase.

Si fuera posible tener una variable estática, como defaultValueera de esperar Entry<String,Integer>.defaultValuea ser un número entero. Y que se puede esperar Entry<Integer,String>.defaultValuea ser una cadena. Pero después del tipo de borrado de una sola Entryclase con una sola defaultValuevariable, que ahora tiene que ser a la vez de enteros y de cadena. Eso es imposible. Es por eso que no se puede tener una variable estática del tipo genérico.

Supongo que te gusta

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