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

时间:2014-06-02 02:58:51

标签: 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类以在此处传递它?

1 个答案:

答案 0 :(得分:9)

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