java-8 - 如何将类传递给 Nashorn 中的方法?

标签 java-8 nashorn

我们的一个脚本包含以下行,调用 Ant 中的方法来获取提供程序:

var provider = resource.as(org.apache.tools.ant.types.resources.FileProvider);

由于更新到 Java 8,现在失败并出现错误:
java.lang.ClassCastException: Cannot cast jdk.internal.dynalink.beans.StaticClass to java.lang.Class
        at sun.invoke.util.ValueConversions.newClassCastException(ValueConversions.java:461)
        at sun.invoke.util.ValueConversions.castReference(ValueConversions.java:456)
        at jdk.nashorn.internal.scripts.Script$\^eval\_.getFileHack(<eval>:131)
        at jdk.nashorn.internal.scripts.Script$\^eval\_.runScript(<eval>:207)

我试图弄清楚 Nashorn 文档发生了什么变化,但并不是特别清楚。以下更改使用我在记录的示例中看到的内容给出了相同的错误:
var provider = resource.as(Java.type("org.apache.tools.ant.types.resources.FileProvider"));

如何将 StaticClass 转换为 Java Class 以在此处传递它?

最佳答案

使用 .class :

var provider = resource.as(org.apache.tools.ant.types.resources.FileProvider.class);

或者
var provider = resource.as(Java.type("org.apache.tools.ant.types.resources.FileProvider").class);

就像在 Java 中一样 :-)

关于java-8 - 如何将类传递给 Nashorn 中的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23986747/

相关文章:

java - 在 java 中为 nashorn 启用脚本模式

javascript - 当使用绑定(bind)进行 eval 时,Nashorn 找不到函数

java - 使用 java javascript 脚本 API 操作 HTML 节点

java - Java 中对区域设置 (tn-ph) 和 (hmn-cn) 的支持

java - 连接列表中所有 map 的字符串值

java - 如何传递和使用任意 lambda 函数作为参数

java - 为什么 Java 编译器不报告 Intellij 中多播表达式的未经检查的强制转换警告?

java - Java流中continue关键字的等价物?

javascript - 将 toString 方法暴露给 nashorn 中的 js 对象

java - 将外部库与 Nashorn Javascript 引擎结合使用