Processingであるプロトタイプを作成していまして、引数をもとにそのクラスのインスタンスを複数生成するようなメソッドが欲しくなりました。ファクトリーメソッドとしてstaticメソッドを追加するもなぜかコンパイルエラーが消えません。調べてみると以下のリンクが。
Link: .pdeはインナークラス、.javaは別クラス
ProcessingのIDEで開発するとタブをわけて記載してもにインナークラスになってしまうようです。なるほどです。インナークラスからならstaticメソッドは確かに呼べない。で、別クラスにするにはタブ名の最後に.javaをつければいいようです。ただし、その場合、PAppletのインナークラスではなくなるので、Processingの各種メソッド等は使えなくなります。
ちなみに動作検証するため小さなプログラムを作りました。以下に記します。Processingプロジェクトとしては1つでその中にtest_factoryMethodとTest.javaのタブがある、という感じです。これだけだと何に使えるかわからないですね。。。やりたかったことは、当初、Testクラスはコンストラクタで自分自身を1つインスタンス生成すれば良かったのですが、途中から1つの引数をもとに複数のインスタンスを生成する必要が生じました。自分で自分の分身を複数作る。。。という感じになります。とりあえず自分自身のインスタンスを生成(ファクトリーメソッド)して、結果を配列かコレクションクラスに入れて返すという感じにしたかったのです。
- test_factoryMethod
ArrayList l = Test.createTests(); println(((Test)l.get(0)).name); println(((Test)l.get(1)).name); println(((Test)l.get(2)).name);
- Test.java
import java.util.ArrayList; class Test { String name; public Test(String name) { this.name = name; } public static ArrayList createTests() { ArrayList a = new ArrayList(); for(int i=0; i<10; i++){ a.add(new Test("No."+i)); } return a; } }