¿Es posible de alguna manera 'importar' una nueva clase Java en un programa en ejecución y hacer uso de ella?Escribir e implementar nuevos archivos de clase Java durante el tiempo de ejecución
¿Podría hacer que un programa cree un nuevo archivo de tipo '.java' y luego incluirlo en los archivos del proyecto y hacer referencia a él sin tener que reiniciar el programa?
El siguiente es un ejemplo de lo que quiero decir:
import java.io.*;
public class Program {
File JClass = new File("JClass.java");
public static BufferedWriter out = null;
public static void main(String[] args) {
try {
out = new BufferedWriter(new FileWriter("JClass.java"));
out.write("public abstract class JClass {");
out.newLine();
out.newLine();
out.write(" public void printSomething(String a) {");
out.newLine();
out.write(" System.out.println(a);");
out.newLine();
out.write(" }");
out.newLine();
out.write("}");
out.close();
} catch (IOException e)
{
System.exit(-1);
}
//Somehow import JClass.java as a class here
JClass.printSomething("Yay! It worked!");
}
}
resultante archivo 'JClass.java':
public abstract class JClass {
public void printSomething(String a) {
System.out.println(a);
}
}
Del mismo modo, sería posible crear una copia de una de las los archivos fuente del proyecto, edite el código en el archivo y luego fuerce de algún modo los cambios sobre el programa en ejecución?
No me importa tanto la aplicación práctica en este momento. Simplemente estoy explorando diferentes ideas que he tenido relacionadas con la programación. También entiendo que este es el potencial para todo tipo de desastres. La edición de código en ejecución y la inclusión de clases sobre la marcha (que no creo que se verifiquen los errores al igual que las otras clases cuando se construye el proyecto) podría tener resultados muy impredecibles. Simplemente quiero jugar con la idea.
Dicho esto, si alguien tiene advertencias ÚNICAS o cosas que debe tener en cuenta, las agradecería. De lo contrario, agradecería que la gente no respondiera "Esta es una mala idea" o "hay formas más fáciles y mejores de resolver problemas". NO estoy tratando de resolver un problema con esto. Solo estoy explorando la idea.
Entonces, ¿es esto posible?
ASM y CGLIB son bibliotecas similares. Este enfoque es ampliamente utilizado y, probablemente, la "mejor" forma de crear código sobre la marcha. – erickson
Eww, EATS utiliza la notación húngara. :-( – corsiKa