これは、"Capturing Nashorn's Global Variables"という質問と同じ行に沿っています。グローバルオブジェクトへの変数の代入を傍受できないことを非常に制限しています。例えばNashornのグローバルオブジェクト変数のアクセス/インターセプト
、私はスクリプト "A = 10" をevalし言います。おそらく、「a」がスコープに追加されたことを通知するリスナーを呼びたいと思うかもしれません。私がこれを行うことができる唯一の方法は、スクリプトがevalされた後にグローバルオブジェクトを調べることです。
または私はグローバルスコープに割り当てられているオブジェクトをインターセプトし、他のためにそれを代用したいと言います。それはBindings
を使用していた場合、私はput
を実装し、いくつかの他のバインディングにオフ委任することができます:
public Object put(String name, Object value) {
//put a toStringed version of the object in scope
return delegate.put(name, value+"");
}
この方法では、コード「= 10」はevalledされたとき、それがスコープ内に「10」を置く代わりの10でしょう。
それは私がグローバルオブジェクトのために、この実装のようなものを提供することができないことを実現するためのBindings
インタフェースを持つ便利だが、イライラします。 ScriptObjectMirror
が最終的なので、私はこれをオーバーロードして、その後のコールを内部のScriptObject
に乗っ取ることはできません。何か不足していますか?だから、基本的にはあなたが何をしたいのか