JavaBeans:添字演算子
インスタンス変数が配列として宣言されていると、Jythonを介して、添字演算子[]を適用できます。
public class ColorBeans { private String[] colors; public ColorBeans() { this.colors = new String[] {"Red", "Green", "Blue"}; } public String[] getColor() { return this.colors; } public void setColor(String[] colors) { this.colors = colors; } }
Javaで記述したクラスColorBeansには、String[]型の特性colorsを定義しています。これは、String型の要素を列挙した配列です。これには、獲得/設定メソッドgetColor/setColorが定義されます。
colorではなくcolorsとなっていることです。つまり、C#におけるプロパティと同様に、メソッドと変数の名前を一致させる必要はありません。これは、要求仕様の変更に伴う作業の処方箋として重宝され、変更容易性と連続性に優れた、agile言語には欠かせない特徴の一つです。連続性に関する広範な論議は、プログラミング言語Eiffelなどを参照してください。>>> import ColorBeans
importを利用すると、クラスファイルColorBeans.classで定義された情報に、Jythonからアクセスできます。
>>> dir(ColorBeans) ['color', 'getColor', 'setColor']
組み込み関数dirを使って、クラスColorBeansに固有の情報を調べると、メソッドgetColor/setColorが定義されているのが分かります。
>>> dir(ColorBeans()) ['__init__', 'class', 'color', 'equals', 'getClass', 'getColor','hashCode', 'notify', 'notifyAll', 'setColor', 'toString', 'wait']
クラスColorBeansのインスタンスに固有の情報を調べると、先と同様に、親クラスObjectから継承したメソッドgetClassなども含まれるのが分かります。
>>> properties(ColorBeans) ['class', 'color']
先に示した方法を利用すると、クラスColorBeansに固有の特性colorのほかに、親クラスObjectで定義された特性classが得られます。
配列の各要素にアクセスする
>>> bean = ColorBeans() >>> bean.color[1] Green
Jythonでは、Pythonのスタイルを併用できます。メソッドgetColorを使わなくても、属性名colorを使って値(配列)を獲得したり、添字演算子[]を使って、配列内の各要素にアクセスできます。
>>> for e in bean.color: print e Red Green Blue
また、for文を使って、配列内の各要素eにアクセスできます。すると、配列内の各要素が順に出力されるのが分かります。
>>> bean.color[1] = "Yellow" >>> bean.color[1] Yellow
先と同様に、メソッドsetColorではなく、添字演算子[]と代入演算子=を使って、値を設定できます。すると、GreenからYellowへと変化したのが分かります。
JavaBeans:キーワード引数とタプル
インスタンス変数が任意のクラスのインスタンスとして宣言されているなら、Jythonを介して、便利な機能を利用できます。
import java.awt.Dimension; public class TupleBeans { private Dimension size; public TupleBeans() { this.size = new Dimension(0, 0); } public Dimension getSize() { return this.size; } public void setSize(Dimension d) { this.size = d; } }
Javaで記述したクラスTupleBeansには、Dimension型の特性sizeを定義しています。これには、獲得/設定メソッドgetSize/setSizeが定義されます。
>>> import TupleBeans
importを利用すると、クラスファイルTupleBeans.classで定義された情報に、Jythonからアクセスできます。
>>> dir(TupleBeans) ['getSize', 'setSize', 'size']
組み込み関数dirを使って、クラスTupleBeansに固有の情報を調べると、メソッドgetSize/setSizeが定義されているのが分かります。
>>> dir(TupleBeans()) ['__init__', 'class', 'equals', 'getClass', 'getSize', 'hashCode','notify', 'notifyAll', 'setSize', 'size', 'toString', 'wait']
クラスTupleBeansのインスタンスに固有の情報を調べると、先と同様に、親クラスObjectから継承したメソッドgetClassなども含まれるのが分かります。
>>> properties(TupleBeans) ['class', 'size']
先に示した方法を利用すると、クラスTupleBeansに固有の特性sizeのほかに、親クラスObjectで定義された特性classが得られます。
JavaBeansの属性を初期設定する
>>> bean = TupleBeans(size=(200, 100)) >>> bean.size java.awt.Dimension[width=200,height=100]
Jythonでは、Pythonのスタイルを併用できます。キーワード引数size=を使うと、メソッド呼び出しsetSize()と同じ効果が得られます。ただし、この方法が有効なのは、コンストラクタ呼び出しの場合だけです。また、実引数にタプル200,100を指定すると、型情報を手掛かりに適切なDimension(200,100)を呼び出します。これは、メソッド呼び出しsetSize(Dimension(220,100))と等価です。
>>> bean = ColorBeans(color=["Black", "White"]) >>> bean.color array(java.lang.String,['Black', 'White'])
先の事例でも、キーワード引数color=の実引数にリスト["Black","White"]を指定すると、リスト内の各要素には、String[]型配列内の各要素が初期設定されます。
JythonからJavaへの自動変換には、多数のバリエーションが存在します。詳細は、マニュアルの項目を参照してください。機会があれば、後の連載で取り上げます。

'hashCode', 'notify', 'notifyAll', 'setColor', 'toString', 'wait']