java - 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()
不带参数)工作得很好,这就是为什么我很确定我的“研究”很好。但是,根据这个线程,我认为我确实以正确的方式访问了 Java 枚举。
Java方法具有可变参数的事实似乎与我无关,是吗?
该错误消息似乎有点误导,因为它看起来第一个报告的可用签名与我传递的参数完全匹配。
解决方案
varargs 参数与您有关。该声明public int initializeExtractor(Language... languages) {...}
定义了一个方法,该方法需要一个对象数组Language
,但提供了语法糖,以便将带有单个Language
参数的 Java 调用强制转换为带有一个元素的 Array,但看起来Inline::Java
Perl 中的包并没有以这种方式进行优化:
package.Language is not a kind of [Lpackage.Language;
即,单个package.Language
参数与package.Language
对象列表不同。您可以从 Perl 显式提供列表,但将参数括在[
括号中]
。
$instance->initializeExtractor( [ $package::Language::ENGLISH ] );
推荐阅读
- python - Python - Numpy中线和点之间的欧几里得距离
- python - 为什么 pip --version 和 pip3 --version 在同时安装 Python3.7 时默认为 Python3.6?
- python - 如何获取 lxml.etree 的父标签属性,如“KEY”、“NAME”、Python 3.6
- selenium-webdriver - 有没有更好的方法来定位以下 HTML 代码的元素?
- button - Thymeleaf 按钮调用 url 在新选项卡中带有参数
- python - 如何在递归函数中控制函数调用的次数。即递归函数调用自身的次数
- java - 抽象类和非抽象类中的构造函数
- python - 从列表中删除第三个元素,直到少于 3 个数字
- visual-studio - 桥接 2 个 docker-compose 解决方案?
- java - 为什么从包含实体查询布尔值时@Formula 总是返回 true?