4

スクリプトの 1 つに次の行があり、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 クラスに変換してここに渡すにはどうすればよいですか?

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 に答える