我想在Ruby中转换以下java匿名接口实现。我是Ruby编码的新手。
DiscoveryHandler discoveryHandler = new DiscoveryHandler() {
List<DiscoveredPrinter> printers = new ArrayList<DiscoveredPrinter>();
public void foundPrinter(DiscoveredPrinter printer) {
printers.add(printer);
}
public void discoveryFinished() {
for (DiscoveredPrinter printer : printers) {
System.out.println(printer);
}
System.out.println("Discovered " + printers.size() + " printers.");
}
public void discoveryError(String message) {
System.out.println("An error occurred during discovery : " + message);
}
};
DiscoveryHandler是一个Java接口,其中包含三个方法。 1. foundPrinter() 2. discoverFinished() 3. discoveryError() 我认为,当它的实例(在上面的例子中是discoveryHandler)被创建时,应该重写它。我不确定。 提前谢谢。
答案 0 :(得分:1)
如果接口只有一个方法(或它的Java 8功能方法),你可以简单地通过在一个地方使用一个块来实现它,方法需要DiscoveryHandler
作为它的最后一个参数,例如:
someJavaObject.registerHandler do |printer| # foundPrinter(printer)
printers.add printer # assuming registerHandler(DiscoveryHandler)
end
它也可以使用单个块实现多个接口方法,在这种情况下,您将Java方法名称作为第一个块参数。
从你的样本中不清楚界面方法是什么,你似乎似乎没有JRuby block-to-iface转换的用例,尤其是因为你正处于一个州。