是否可以将匿名类从Java转换为JRuby?

时间:2013-08-07 17:02:12

标签: java interface jruby anonymous snmp4j

我正在开发一个围绕SNMP4J-Agent库的JRuby包装器,可以在这里找到:

网站:http://www.snmp4j.org/
JavaDocs:http://www.snmp4j.org/agent/doc/


到目前为止它非常有趣,但是我无法破译下面的一段Java代码以在JRuby中实现:

server = new DefaultMOServer();
vacmMIB = new VacmMIB(new MOServer[] { server });

问题在于 - 据我所知 - 用new({1}}(这是一个接口)来构建一个传递服务器对象的匿名函数,我似乎无法理解找到用JRuby表达的正确方法。我已经包含了有关Java类的信息:


MOServer[]定义为

DefaultMOServer

JavaDoc:http://www.snmp4j.org/agent/doc/org/snmp4j/agent/DefaultMOServer.html


public class DefaultMOServer implements MOServer { public DefaultMOServer() { ... } ... } 定义为

VacmMIB

JavaDoc:http://www.snmp4j.org/agent/doc/org/snmp4j/agent/mo/snmp/VacmMIB.html


最后,public class VacmMIB implements MOGroup, MutableVACM { public VacmMIB(MOServer[] server) { this.server = server; ... } ... } 被定义为

MOServer

JavaDoc:http://www.snmp4j.org/agent/doc/org/snmp4j/agent/MOServer.html



这大致是我在JRuby中所做的:

public interface MOServer {
   ...
}

运行上面的代码会为我设置require 'java' require 'snmp4jruby' require 'lib/snmp4j-agent-1.4.3.jar' module Agent include_package 'org.snmp4j.agent' module MO include_package 'org.snmp4j.agent.mo' module SNMP include_package 'org.snmp4j.agent.mo.snmp' end end end class SnmpAgent < Agent::BaseAgent # Setup the agent def init ... everything works fine up here ... # Server is created early on without issue self.server = Agent::DefaultMOServer.new # Having trouble here _server = Agent::MOServer.new { self.server } self.vacmMIB = Agent::MO::SNMP::VacmMIB.new(_server) end end

的行提供以下错误
self.vacmMIB = ...



任何方向都将非常感谢!

1 个答案:

答案 0 :(得分:1)

您的问题似乎是VacmMIB构造函数将MOServer数组作为参数,并且您正在传递MOServer的实例。

试试这个:

_server = Agent::MOServer.new { self.server }
# your code
# self.vacmMIB = Agent::MO::SNMP::VacmMIB.new(_server) 
# updated code
self.vacmMIB = Agent::MO::SNMP::VacmMIB.new([_server])