Groovyの動的解析

:あなたの目の前で何かを言う必要がありますか?

B:それを必要としませんか?

:それを必要としますか?

 

解決方法:指定されたパスによってGroovyScriptEngineを初期化します

// 通过指定的経路来初始化GroovyScriptEngine 
のString [] = {パス"D:\\ GroovyScript" }。
GroovyScriptEngine GSE = 新しいGroovyScriptEngine(パス)。

結合結合 = 新しい)(結合; 
binding.setVariable( "入力"、 "世界" ); 

gse.run( "GroovyDemo.groovy" 結合)。
System.out.println(binding.getVariable( "出力"));

GroovyDemo.groovy

出力= "こんにちは$ {入力}!"

分析方法:根を指定することにより、GroovyScriptEngineを初期化します

// 通过指定的根来初始化GroovyScriptEngine 
のString []根= 新しい文字列[] { "SRC / COM / CCAV / javarisk /" }。
GroovyScriptEngine gsen = 新しいGroovyScriptEngine(ルーツ); 
GroovyObject groovyObject =(GroovyObject)gsen.loadScriptByName( "HelloWorld.groovy" ).newInstance(); 
文字列の結果 =(String)をgroovyObject.invokeMethod( "出力"、 "世界" ); 
System.out.println(結果)。

HelloWord.groovy

クラスにTestScript { 
    静的な文字列出力(DEF文字列){ 
        リターンの"Hello" + STR + "は、私が最初ですよ!" ; 
    } 
}

解決するには、3つの方法:エンジンの解析テキストコンテンツの直接のインスタンスを作成します

// インスタンスを作成し、直接解析されたテキストエンジン 
ScriptEngineManager工場= 新しい新しいScriptEngineManager(); 

// 毎回生成エンジン例 
たScriptEngine = factory.getEngineByNameエンジン( "グルービー" 
のSystem.out.println(engine.toString())。
エンジンアサート!= nullの; 
バインディングバインディング =のengine.createBindings(); 
binding.put( "DATE"、新しい新しい日付を()); 

// テキストファイルからのスクリプトは、最初のファイルの内容を取得した場合 
engine.eval(「DEF getTimeを( )date.getTime {リターン();} " は、結合); 
engine.eval( " DEFのsayHello(名前、年齢){リターン'こんにちは、I AM' +名+ '年齢' +年齢;} " )。
長い時間=(ロング)((呼出し可能)エンジン).invokeFunction( "getTime"、NULL ); 
System.out.println(時間); 
文字列メッセージ =(文字列)((呼出し可能)エンジン).invokeFunction( "のsayHello"、 "zhangsan"、新たな整数(12 ))。
System.out.println(メッセージ)。

 

おすすめ

転載: www.cnblogs.com/wpcnblog/p/10973433.html