我正在围绕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(这是一个接口)强制转换MOServer[]创建了一个传递给服务器对象的匿名函数,而我似乎找不到正确的表达方式用JRuby。我提供了有关Java类的信息:



DefaultMOServer定义为

public class DefaultMOServer implements MOServer {
    public DefaultMOServer() {
       ...
    }
    ...
}


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



VacmMIB定义为

public class VacmMIB implements MOGroup, MutableVACM {
    public VacmMIB(MOServer[] server) {
       this.server = server;
       ...
    }
    ...
}


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



最后,MOServer被定义为

public interface MOServer {
   ...
}


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


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

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 = ...的那行的以下错误:

TypeError: failed to coerce org.jruby.gen.InterfaceImpl792882806 to [Lorg.snmp4j.agent.MOServer;



任何方向对此将不胜感激!

最佳答案

您的问题似乎是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])

关于java - 是否可以将匿名类从Java转换为JRuby?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18109404/

10-10 17:15