你能从JavaScript扩展抽象Java类吗



我正在做一个非常大量地使用javax.script.*包的项目。我有一种情况,我想创建扩展抽象Java类的JavaScript对象,就像您可以使用Invocable.getInterface来创建实现Java接口的JavaScript对象一样。这可能吗?如果是,你是怎么做的?

是的,你可以;之前的海报是错误的。请参阅JavaAdapter的文档。

除非你想在运行时生成字节码(如下所示使用BCEL),否则不行。你可以使用代理类的接口来实现这一点,但抽象类没有等效的方法。

如果你真的想尝试BCEL,你最好的策略是这样做:

  1. 编写一个方法,使用BCEL为一个新类生成字节码的byte[],该类扩展抽象类并将每个抽象方法委托给JavaScript
  2. 定义一个将抽象类与包装器相关联的命名约定,例如foo.MyAbstractClass对应于foo.MyAbstractClassDynamicLangWrapper
  3. 滚动一个实现findClass的ClassLoader,以识别该命名约定并生成类字节并调用defineClass
  4. 确保您的脚本语言使用自定义类加载器来解析脚本中的类名。我认为在Rhino中使用setApplicationClassLoader,但我不确定

相关内容

  • 没有找到相关文章

最新更新