Java- por la reflexión a través de la inspección genérica

En primer lugar, la descripción del requerimiento

Existiendo un ArrayList Array = new ArrayList (); Cómo añadir el tipo de datos de la matriz de la cadena? ? ?

En segundo lugar, pensar

Sabemos que una vez en las clases de colección especifica de tipo genérico, sólo el tipo que se utiliza en la colección. Sin embargo, podemos utilizar la reflexión para inspeccionar el genérica cruzado. Por ejemplo, usando el reflejo en el método de adquisición complemento ArrayList (), a continuación, llamar al método add, atravesará la inspección genérico. Descompilar podemos ver este fenómeno.

Siguiendo el código existente que utiliza el genérico cuando la creación de ArrayList.

public class Test {
	public static void main(String[] args) throws Exception {
		ArrayList<Integer> array = new ArrayList<Integer>();
	}
}

Descompilar ver el archivo utilizando la clase, usted no encontrará ningún aumento en los genéricos durante este tiempo crear ArrayList.

Esto se debe a que los controles genéricos se llevan a cabo en tiempo de compilación, lo que significa que el método add compilado (), y de hecho no especificó complemento genérico () método es el mismo, hay un examen genérico.

Por lo tanto, al reflejar el complemento fichero objeto ArrayList Clase adquirida () método cuando el método add llamando al () no es una inspección genérico.

En tercer lugar, para alcanzar la demanda

Ahora usamos la reflexión para implementar este requisito.

Código es el siguiente:

public class Test {
	public static void main(String[] args) throws Exception {
		ArrayList<Integer> array = new ArrayList<Integer>();
		array.add(18);

		Class c = array.getClass();
		Method m = c.getDeclaredMethod("add", Object.class);
		m.invoke(array, "Hello");
		System.out.println(array);
	}
}

resultados de la prueba son los siguientes:

Supongo que te gusta

Origin www.cnblogs.com/Java-biao/p/12590897.html
Recomendado
Clasificación