ダイナミックインポートを使うことで、”必要なときだけ”必要なパッケージをインポートすることができます。これによって、アプレット起動などのパフォーマンスを向上させることができます。
以下が例となります。
|| pはPackageクラス(ここではCOM.CURL.CDK.SQLITEパッケージをインポート) def p = {import-package {make-package-selector “COM.CURL.CDK.SQLITE”}} || SQLiteDatabaseクラスを取得 def SD = {p.lookup “SQLiteDatabase”, check-imports? = true} def the-database = {SD {url “test.db”}} || SQLiteDatabaseのインスタンス生成(コンストラクタの呼出) {the-database.execute |” CREATE TABLE IF NOT EXISTS orb_simple_cache ( name VARCHAR, key VARCHAR, value BLOB, PRIMARY KEY (name, key)) “| } || SQLiteDatabase.executeメソッドの呼出 |
ダイナミックインポートを利用するには、import-packageを利用して、Packageクラスのオブジェクトを取得します。(ちなみにその引数で対象のパッケージを選択するために、make-package-selectorを使うことができます。)
注意) このとき、上記の方法の場合、マニフェストにパッケージを指定する必要があります。マニフェストにパッケージを記述したくない場合は、import-packageのキーワード引数のmanifestにパッケージファイルのurl(パス)を指定します。
対象のPackageオブジェクトから、そのプロシージャやクラスを取得するには、Package.lookupを利用します。(もしパッケージに新しいプロシージャやクラスなどを追加したい場合は、Package.addを使うことで動的に追加できます。)
また以下の例のようにevaluateプロシージャ内でもダイナミックインポートしたパッケージをPackageオブジェクト(正確にはOpenPackage)を利用できます。(evaluateのpackageキーワード引数)
|| pはPackageクラス(ここではCOM.CURL.CDK.SQLITEパッケージをインポート) |
その他関連APIとして、dynamic-lookupなどを参照ください。