Por qué no es posible crear una instancia del tipo de parámetro?

Abhishek Keshri:

En Java, la creación de una instancia de typeparámetro es ilegal, por lo que el siguiente código no funcionará:

class Gen<T> {
    T ob;
    Gen() {
        ob = new T(); // Illegal!!!
    }
}

La razón detrás de esto es:

T no existe en tiempo de ejecución, entonces, ¿cómo sería el know compilador de qué tipo de objeto a crear.

Pero lo que no entiendo es, usando erasureel siguiente código se traducirá en:

class Gen {
    Object ob;
    Gen() {
        ob = new Object(); // Perfectly Fine!!!
    }
}

Porque:

Cuando se compila el código Java, se elimina toda la información de tipo genérico (borrado). Esto significa reemplazar los parámetros de tipo con su tipo límite, que es Objectsi no se especifica límite explícito.

Entonces, ¿por instancias de un typeparámetro es ilegal?

GhostCat saludos Monica C.:

Sencillo: porque eso Tpodría ser cualquier cosa.

Suponga que tiene una Gen<Integer>. Sorpresa: Entero no no tiene un constructor por defecto. Entonces, ¿cómo va a hacer new Integer()a continuación?

El compilador no puede saber si existe un constructor por defecto para lo que viene en como T.

java.lang.Object obviamente, tiene como un constructor.

Supongo que te gusta

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