4

我们的一个脚本有下面这行,调用 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 以将其传递到此处?

4

1 回答 1

11

使用.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 中一样 :-)

于 2014-06-02T11:11:05.150 回答