Perl内联Java中的Java枚举

我使用Inline::Java从我的Perl代码中调用Java库.但是,有一个函数调用我无法使用,因为它需要枚举类型作为参数.

这些是我的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())效果很好,这就是为什么我很确定我的“研究”很好的原因.
但是,根据this thread,我认为我确实以正确的方式访问Java枚举.

Java方法具有varargs参数的事实似乎与我无关,不是吗?

错误消息似乎有点误导,因为它看起来像第一个报告的可用签名与我传递的参数完全匹配.

解决方法:

varargs参数与您有关.声明public int initializeExtractor(Language … language){…}定义了一种方法,该方法需要一个Language对象数组,但提供语法糖,以便将具有单个Language参数的Java调用强制转换为具有一个元素的Array. ,但看起来Perl中的Inline :: Java包尚未通过以下方式进行改进:

package.Language is not a kind of [Lpackage.Language;

即单个package.Language参数与package.Language对象列表不同.您可以从Perl中显式提供列表,但会将参数括在[括号]中.

$instance->initializeExtractor( [ $package::Language::ENGLISH ] );
上一篇:JavaScript快速入门(4):表达式


下一篇:Centos 6 安装 xtrabackup