Creamos una interfaz llamada Hola.
Hola.java
Código: Seleccionar todo
public interface Hola {
public void imprimme();
}
HolaMundo.java
Código: Seleccionar todo
public interface HolaMundo implements Hola {
public void imprimme(){
System.out.println("Hola mundo");
}
}
ClassLoaderMod.java
Código: Seleccionar todo
import com.sun.org.apache.xerces.internal.impl.dv.util.Base64;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
/**
*
* @author adwind
*/
public class ClassLoaderMod extends ClassLoader {
public ClassLoaderMod() {
}
@Override
public Class findClass(String name) {
byte[] b = loadClassData(name);
return defineClass(name, b, 0, b.length);
}
private byte[] loadClassData(String name) {
InputStream m = getResourceAsStream(name);
ByteArrayOutputStream b = new ByteArrayOutputStream();
try {
byte[] buf = new byte[m.available()];
m.read(buf);
b.write(buf, 0, buf.length);
} catch (IOException ex) {
ex.printStackTrace();
}
return Base64.decode(new String(b.toByteArray()));
}
}
Esta clase Prueba.java es donde hacemos uso de las demas.
Código: Seleccionar todo
/**
*
* @author adwind
*/
public class Prueba {
public static void main(String[] args){
ClassLoader cc=new ClassLoaderMod();
try {
//Si el constructor tiene, parametros entonces en el metodo
//getDeclaredConstructor() se le pasan el tipo de clase
//getDeclaredConstructor(String.class, int.class).newInstance("HOLAMUNDO", 2);
Hola aaa=(Hola)cc.loadClass("HolaMundo").getDeclaredConstructor().newInstance();
aaa.imprimme();
} catch (Exception ex) {
ex.printStackTrace();
}
}
}