我正在围绕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/