Maison >Java >javaDidacticiel >Comment compiler et charger dynamiquement des classes Java externes étendant une interface prédéfinie ?
Comment compiler et charger dynamiquement des classes Java externes ?
Le développement de plugins pour un programme peut être simplifié en les compilant et en les chargeant à l'aide du programme lui-même. Ce guide aborde le défi spécifique de la compilation et du chargement dynamiques de classes Java externes qui étendent une interface prédéfinie incluse dans le programme.
Contexte :
L'objectif principal de ce programme vise à permettre aux utilisateurs de créer des plugins personnalisés. Cela leur permet de coder dans des volets de texte, qui sont ensuite copiés dans des méthodes spécifiques de l'interface héritée. Le code créé est enregistré sous forme de fichier Java, prêt à être compilé. Cependant, le programme rencontre des erreurs lors de la tentative de compilation et de chargement du fichier externe en raison de l'absence de l'interface héritée dans son chemin de classe.
Solution :
Pour résoudre ce problème problème, vous devez tirer parti de l'API JavaCompiler de Java. Les étapes suivantes décrivent le processus :
Compilez la classe externe :
// Setup the compiler with the required options JavaCompiler compiler = ToolProvider.getSystemJavaCompiler(); StandardJavaFileManager fileManager = compiler.getStandardFileManager(diagnostics, null, null); // Set the classpath to include your program's package List<String> optionList = new ArrayList<>(); optionList.add("-classpath"); optionList.add(System.getProperty("java.class.path") + File.pathSeparator + "<path-to-your-interface>"); // Compile the external Java file Iterable<? extends JavaFileObject> compilationUnit = fileManager.getJavaFileObjectsFromFiles(Arrays.asList(externalJavaFile)); JavaCompiler.CompilationTask task = compiler.getTask( null, fileManager, diagnostics, optionList, null, compilationUnit); if (task.call()) { System.out.println("Compilation successful!"); } else { // Handle compilation errors } fileManager.close();
Chargez et Exécuter le compilé Classe :
// Create a custom class loader to load the compiled class URLClassLoader classLoader = new URLClassLoader(new URL[]{new File("./").toURI().toURL()}); // Load the compiled class by its fully qualified name Class<?> loadedClass = classLoader.loadClass("<package-name>.<class-name>"); // Create an instance of the loaded class Object obj = loadedClass.newInstance(); // Check if the object implements the required interface if (obj instanceof <your-interface>) { // Cast the object to the interface <your-interface> interfaceInstance = (your-interface)obj; // Execute the method from the interface interfaceInstance.doSomething(); }
En suivant ces étapes, vous pouvez compiler et charger dynamiquement des classes Java externes, permettant aux utilisateurs de créer et d'intégrer des plugins de manière transparente dans votre programme.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!