2009-07-12 1 views
2

Jythonを使用する際に問題がありますが、ドキュメントで解決策が見つからないようです。Jython:Pythonオブジェクトではなく、Javaオブジェクトとしてのスクリプト内でのJavaクラスのインスタンス化

基本的に私はJavaでインスタンス化されたオブジェクトであり、別のJavaオブジェクトを(Pythonスクリプト内で)インスタンス化し、jythonでインスタンス化したオブジェクトにpre-instatiated Javaオブジェクトを追加したい通訳。例えば

public class A { 
    private B bInstance; 

    public void setB(B bval) { 
     bInstance = b; 
    } 
} 

public class B { 
    private String name; 

    public String getName() { 
     return name; 
    } 

    public void setName(String n) { 
     this.name = n; 
    } 
} 

Pythonスクリプト( "b_inst" としてバインドBのインスタンスがある):

import com.package.A 
a_inst = com.package.A() 
a_inst.setB(b_inst) 

私は上記のコードを実行しようとすると、私は次の例外を取得します: TypeError:setB():2つの引数が必要です。 1

これは、setB()メソッドが実際のJavaオブジェクトではなくPythonオブジェクト上のメソッドを呼び出そうとしているからです。基本的には、私はちょうどjythonスクリプトでJavaオブジェクトではなく、Pythonオブジェクトであるために作成したAのインスタンスに対してsetB()を呼び出すことを期待しています。

申し訳ありませんが、これは明白であるならば、私はチュートリアルだけでなく、「一言でJava」のJythonのセクションおよび「コアPythonプログラミング」を読んだが、例は本当に簡単です、彼らはどのようのない例がありませんこの双方向バインディングを行う。

答えて

2

使用しているJythonのバージョンは?私は2.5.0と、次の作品でこれを実行しようとしている:

from com.package import A, B 
b_inst = B() 
a_inst = A() 
a_inst.setB(b_inst) 

私はあなたがここで見るものにそれを変更するので、それはcom.package.A()構文を好きではなかったです。

+0

答えていただきありがとうございます。あなたが試したこととやっていることに微妙な違いがあります: Bのインスタンスは、Javaで作成され、PythonInterpreterインスタンスを通してスクリプトに渡されます。スクリプトのようにPythonでは作成されません。 – Aidos

+0

ああ、私はそれのその側面を逃した!今私はさらに興味をそそられています:) – laz

+0

最新バージョンのJythonにアップデートするとこれが修正されているようです。 – Aidos

関連する問題