org.mozilla.javascript.Context
現在のスレッドにバインドされた新しいオブジェクトを作成するために(とりわけ)使用されるユーティリティクラスを作成しています。単一のグローバルJavaScriptスコープがあり、複数のインポート/初期化ステートメントなどが含まれている場合があります。
外部クラスで、関数を明示的に使用せずに、Utility.getContext()
とを使用するだけで、将来の実行のためにContextオブジェクトとScopeオブジェクトを取得できるようにしたいと思います。コンテキストとスコープの両方が単一インスタンスである必要があるため、シングルトンパターンが必要です。Utility.getScope()
getInstance()
次のコードは意味がありますか?
public class Utility {
private static Utility instance;
private static ScriptableObject scope = null;
private Utility() {}
private static Utility getInstance() {
synchronized (Utility.class) {
if (instance == null)
instance = new Utility();
return instance;
}
}
private static Context getSingletonContext() {
Context context = Context.getCurrentContext();
if (context == null)
context = Context.enter();
if (scope == null) {
scope = new ImporterTopLevel(context);
Script script = context.compileString("Global JavaScript Here","Script Name",1,null);
script.exec(context,scope);
scope.sealObject();
}
return context;
}
public static Context getContext() {
return getInstance().getSingletonContext();
}
public static Scriptable getScope() {
Scriptable newScope = getContext().newObject(scope);
newScope.setPrototype(scope);
newScope.setParentScope(null);
return newScope;
}
}