投稿日: 2015/12/05 16:26:08
Java.type()関数はnew演算子に指定できる型オブジェクトを返します。Rhinoのようにパッケージ名付きのクラス名(FQCN)を書いて型オブジェクトを取得することもできます。例えばjava.lang.Stringの型オブジェクトはJava.type("java.lang.String")またはjava.lang.Stringと記述することで取得できます。
一方で、型オブジェクトではなくjava.lang.Classを取得したい場合は、型オブジェクトのclassプロパティにアクセスするか、既存のJavaオブジェクトのgetClass()メソッドを呼び出します。Nashornはjava.lang.Classから型オブジェクトを取得できるように、staticという特別なプロパティを提供しています。
1. 実行するスクリプト(javaClass.js)
function assertEq(f,x) {var r=f();if(r!==x)throw new Error(f.toSource()+", expected=${x}, actual=${r}");}var JString = Java.type("java.lang.String");// JavaClassprint(JString);assertEq(function() JString, java.lang.String);assertEq(function() Java.type("java.lang.String"), JString);assertEq(function() "".getClass().static, JString);assertEq(function() "".getClass().static.class.static, JString);// java.lang.Classprint("".getClass());assertEq(function() "".getClass(), java.lang.String.class);assertEq(function() "".getClass().static.class, java.lang.String.class);2. jjsで実行する
>jjs -scripting -fullversion javaClass.jsnashorn full version 1.8.0_66-b18[JavaClass java.lang.String]class java.lang.String