JavaオブジェクトをTcl変数としてセットする

 Interp.setVarメソッドでTcl変数にセットすることができる値は、 tcl.lang.TclObjectまたはそのサブクラスでなければいけません。 そこで、これら以外の「普通の」JavaクラスのオブジェクトをTcl変数にセットするには、 tcl.lang.ReflectObjectというクラスを利用して、 Javaクラスのオブジェクトをラップしたtcl.lang.TclObjectオブジェクトを生成して、 これをセットします。 以下に例を示します。

import tcl.lang.*;
import java.util.Vector;

public class ReflectExample {

    public static void main(String[] args) throws TclException {
        Interp interp = new Interp();
        Vector v = new Vector();
        v.addElement("123");
        v.addElement("ももも");

        // java.util.VectorオブジェクトをTcl変数 "v" にセット
        interp.setVar("v",
          ReflectObject.newInstance(interp, Vector.class, v), 0);

        // Tclコマンドの実行
        interp.eval("set iter [$v iterator]");
        interp.eval("while {[$iter hasNext]} {puts [[$iter next] toString]}");

        interp.dispose(); // メモリの解放
    }

}
/* end. */

拡張レビュー分室 top
(first uploaded 2003/07/22 last updated (not ever), MISUMI URANO)