Я использую Inline :: Java для вызова библиотеки Java из моего кода Perl.Однако есть один вызов функции, который я не могу заставить работать, потому что он требует типа enum в качестве аргумента.
Это мои сигнатуры метода Java:
public class Initializer {
[...]
public int initializeExtractor() {...}
public int initializeExtractor(Language... languages) {...}
Я пытаюсь вызвать последнийверсия на Perl:
use Inline (
Java => 'STUDY',
[...]
AUTOSTUDY => 1,
STUDY => [
[...],
'package.Language'
],
JNI => 0,
);
[...]
my $instance = package::Initializer->new( $self->directory() );
$instance->initializeExtractor($package::Language::ENGLISH);
Это сообщение об ошибке:
In method initializeExtractor of class package::Initializer: Can't find any signature that matches the arguments passed (package::Language=HASH(0x2328708)).
Available signatures are:
initializeExtractor([Lpackage.Language;)
error was: package.Language is not a kind of [Lpackage.Language; at /usr/local/lib/perl5/site_perl/5.22.4/x86_64-linux-thread-multi/Inline/Java/Object.pm line 107.
initializeExtractor()
error was: Wrong number of arguments at /usr/local/lib/perl5/site_perl/5.22.4/x86_64-linux-thread-multi/Inline/Java/Object.pm line 107. at /.../PP.pm line 57.
Вызов первого метода (initializeExtractor()
, без аргументов) работает так хорошо, поэтому я уверен, чтомои «учебы» в порядке.Однако, согласно этой теме , я думаю, что я правильно обращаюсь к перечислению Java.
Тот факт, что метод Java имеет аргументы varargs , кажется несвязано со мной, не так ли?
Сообщение об ошибке кажется немного вводящим в заблуждение, поскольку похоже, что первая сообщаемая доступная подпись точно соответствует аргументу, который я передаю.