Estoy experimentando con el uso de diferentes cargadores de clases para cargar una clase en particular, y ver si las variables estáticas en esa clase pueden tener instancias diferentes.Múltiples instancias de variables estáticas
Básicamente, estoy tratando de escribir el código de lo que Stephen C ha mencionado en this answer.
Éstos son mis clases:
CustomClassLoader.java
class CustomClassLoader extends ClassLoader
{
public Class loadClass(String classname) throws ClassNotFoundException {
return super.loadClass(classname, true);
}
}
Test.java (que contiene el controlador)
class Test {
public static void main(String[] args) throws Exception {
CustomClassLoader c1 = new CustomClassLoader();
CustomClassLoader c2 = new CustomClassLoader();
Class m1, m2;
m1 = c1.loadClass("A");
m2 = c2.loadClass("A");
m1.getField("b").set(null, 10);
System.out.println(m1.getField("b").get(null));
System.out.println(m2.getField("b").get(null));
}
}
A.java (que contiene la variable estática)
class A {
public static int b = 5;
}
Cuando ejecuto la clase de prueba, me sale el siguiente resultado:
$ java Test
10
10
que esperaba que la salida sea 10 y 5. ¿Cómo puedo hacer que el código crear dos instancias de mi variable estática?
Nota: Estoy haciendo esto solo para la experimentación y el aprendizaje, pero me gustaría saber si podría haber alguna aplicación en el mundo real de esto.
Gracias, Paul. Intentaré cargar las clases sin llamar a 'super.loadClass()'. ¿Podría recomendar algún buen recurso que lo explique? – AbdullahC
He actualizado mi respuesta arriba. Me temo que no conozco ningún buen tutorial aparte de http://www.javaworld.com/javaworld/jw-10-1996/jw-10-indepth.html. –
Tu código se compila perfectamente, pero obtengo la siguiente excepción en las líneas que establecen u obtienen 'b':' Excepción en el hilo "principal" java.lang.IllegalAccessException: Class Test no puede acceder a un miembro de la clase A con modificadores "public estático "'. – AbdullahC