我正在编写一个应用程序,其中有一个文本编辑器供用户编写自己的代码。然后我想编译所说的代码,这很容易。我不知道该怎么做的技巧是从用户编译的代码中调用应用程序源中的函数
例如,如果我有一个名为'Player'的类,其函数为MoveUp(); ,我怎么能从用户编译的代码中调用该函数?
答案 0 :(得分:1)
如果您已经知道如何编译代码,并且知道编译的类文件存储在哪里,那么实际上并不是太糟糕。它只需要一点反思。
//replace filePath with the path to the folder where the class file is stored
URLClassLoader classLoader = URLClassLoader.newInstance(new URL[]{filePath.toURI().toURL()});
//this actually loads the class into java so you can use it
Class<?> cs = Class.forName(compiledClassName, true, classLoader);
//the getConstructor method will return the constructor based on the
//parameters that you pass in. The default constructor has none, but if
//you want a different constructor you just pass in the class of the
//object you want to use
Constructor<?> ctor = cs.getConstructor();
//you can then just create a new instance of your class
Player player = (Player) ctor.newInstance();
//You can then call any methods on the Player object that you want.
player.MoveUp();
请记住,在编译代码时,类包可以移动已编译类文件的位置。可能更容易删除其代码的package语句,或者将包添加到您希望的位置。
作为旁注,如果你打算对多个&#34; Player&#34;在同一个类中,每个类都需要一个唯一的名称。如果他们没有,那么他们最终将共享相同的类文件,因此具有相同的代码。