我在用内联::Java https://metacpan.org/pod/Inline::Java在 Perl 中,我需要将哈希传递给 Java 方法。
我尝试过以下代码:
my $obj = new Pod_101() ;
my %data = ('input' => 45, 'Lisa' => 30, 'Kumar' => 40);
my $val = $obj->evaluate(\%data, "\${input*12}");
它会导致以下错误:
无法将 HASH(0x556322c62368) 转换为对象 java.util.Map
/usr/lib/x86_64-linux-gnu/perl5/5.26/Inline/Java/Object.pm 第 107 行。
似乎不直接支持将 Perl 哈希值传递给 Java。
以下是如何通过将哈希键和值作为数组传递来解决此问题的示例:
use Inline Java => <<'END' ;
import java.util.* ;
class Pod_101 {
public Pod_101() {
}
public HashMap get_hash (String keys[], Integer vals[] ){
HashMap<String, Integer> hash = new HashMap<>() ;
for(int i= 0; i < keys.length; i++){
hash.put(keys[i], vals[i]);
}
return hash;
}
public Integer evaluate(HashMap<String, Integer> h, String foo){
return h.get("input") ;
}
}
END
my $obj = Pod_101->new() ;
my %data = ('input' => 45, 'Lisa' => 30, 'Kumar' => 40);
my $h = $obj->get_hash( [keys %data], [values %data]) ;
my $val = $obj->evaluate($h, "\${input*12}");
print "$val\n";
Output:
45
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)