Документация 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();
... все три функции будут возвращать указатель на некоторый объект Foo, который будет назначен переменной объекта Java, последняя из которых требует выделения типа значения, о котором Java-сборщик мусора позаботится после выпуска.
Но предположим, что spam5 () возвращает указатель на массив. В Java я должен использовать семантику массива для доступа к отдельным элементам, но я не думаю, что я могу просто сделать это:
Foo foo[] = spam5();
Я даже не думаю, что компилятор примет приведение к (Foo []), так как это работает в SWIG?