我们的一个脚本包含以下行,调用 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/