En primer lugar, la descripción del requerimiento
Existiendo un ArrayList
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: