[Nashorn] JavaClass(type object) & java.lang.Class
投稿日: 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");
// JavaClass
print(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.Class
print("".getClass());
assertEq(function() "".getClass(), java.lang.String.class);
assertEq(function() "".getClass().static.class, java.lang.String.class);
2. jjsで実行する
>jjs -scripting -fullversion javaClass.js
nashorn full version 1.8.0_66-b18
[JavaClass java.lang.String]
class java.lang.String