SWIG のドキュメントでは、C でのさまざまな入力タイプについて、次のように説明しています。
void spam1(Foo *x); // Pass by pointer
void spam2(Foo &x); // Pass by reference
void spam3(Foo x); // Pass by value
void spam4(Foo x[]); // Array of objects
... Java では、次のようにすべて単一の型の引数を取ります。
Foo f = new Foo(); // Create a Foo
example.spam1(f); // Ok. Pointer
example.spam2(f); // Ok. Reference
example.spam3(f); // Ok. Value.
example.spam4(f); // Ok. Array (1 element)
同様に、C の戻り型の場合:
Foo *spam5();
Foo &spam6();
Foo spam7();
... 3 つの関数はすべて、Java オブジェクト変数に割り当てられる Foo オブジェクトへのポインタを返します。最後の関数では、リリース時に Java ガベージ コレクションが処理する値型の割り当てが必要です。
しかし、spam5() が配列へのポインタを返すとします。Java では、個々の要素にアクセスするために配列セマンティクスを使用する必要がありますが、これだけでできるとは思いません。
Foo foo[] = spam5();
コンパイラが (Foo[]) へのキャストを受け入れるとは思えませんが、これは SWIG ではどのように機能するのでしょうか?