java执行之间的Java字符IO
使用 javax.tools.JavaCompiler 和 javax.tools.ToolProvider,我将用户输入字符串(应该是一个方法)与预定义的类一起包装在一个大字符串并在我的代码中执行它。有没有办法(在相同的代码中)实例化已编译的类(因为它直到运行时才存在)以使用一组预定义的情况测试所述函数?
示例:提示用户编写一个方法,该方法返回作为参数发送给它的相反布尔值。
用户输入所述方法。
我在该方法周围封装了一个泛型类,并使用一组预定义的测试用例(true、false)来检查其功能(应该返回 false、true)
Using javax.tools.JavaCompiler
and javax.tools.ToolProvider
, I'm wrapping a user-input string (which should be a method) with a predefined class all within a large string and executing it within my code. Is there a way to (in the same code) instantiate the class that was compiled (as it doesn't exist until runtime) to test said function with a predefined set of cases?
Example: User is prompted to write a method that returns the opposite boolean sent to it as an argument.
User types in said method.
I wrap a generic class around the method, and use a predefined set of test cases (true, false) to check it's functionality (should get false, true back)
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
也许,通过将生成的类读入
byte[]
并使用 Classloader.defineClass(..) 解析/构造一个 Class 对象。要正确解析该类,该类引用的所有资源都应该可供您正在使用的类加载器实例使用。拥有 Class 对象后,您可以实例化它并使用反射调用该方法。Perhaps, by reading the generated class into
byte[]
and using Classloader.defineClass(..) to resolve/construct a Class object. To resolve the class properly, all resources referred by this class should be available to the classloader instance you're using. Once you have a Class object, you can instantiate it and invoke the method using reflection.