Perl 内联 Java 中的 Java 枚举

标签 java perl enums

我使用 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... languages) {...} 定义了一个需要 Language 对象数组的方法,但提供了语法糖,以便 Java使用单个 Language 参数的调用被强制转换为具有一个元素的数组,但看起来 Perl 中的 Inline::Java 包并没有被这样改进:

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

即,单个 package.Language 参数与 package.Language 对象列表不同。您可以显式提供来自 Perl 的列表,但将参数括在 [brackets] 中。

$instance->initializeExtractor( [ $package::Language::ENGLISH ] );

关于Perl 内联 Java 中的 Java 枚举,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50684643/

相关文章:

java - Java中的数组列表

java - 在面板内绘制图像

perl - 查找输入值大于或等于键且记录未排序的最近键匹配

java - 用Java中的所有枚举值填充列表

Java : String Check for null and two attributes

java - 创建一个方法来确定两个数字中较大的一个

perl - perl 模块可以 "use"其他 perl 模块吗?

regex - 如何在Perl正则表达式中匹配换行符\n?

java - 使用 2 个不同的 ENUM 在 Java 中构建一副纸牌

c# - 在 C# 中处理 switch case 的更好方法