我想在 Ruby 中转换以下 java 匿名接口(interface)实现。我是 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 接口(interface),其中包含三个方法。 1. 找到打印机() 2. 发现完成() 3. 发现错误() 我认为,在创建其实例(在上面的情况下 discoveryHandler )时应该覆盖它。我不知道。 提前致谢。
最佳答案
如果接口(interface)只有一个方法(或其 Java 8 函数式方法),您可以简单地通过在方法采用 DiscoveryHandler
作为其最后一个参数的位置上使用 block 来实现它,例如:
someJavaObject.registerHandler do |printer| # foundPrinter(printer)
printers.add printer # assuming registerHandler(DiscoveryHandler)
end
也可以使用单个 block 实现多个接口(interface)方法,在这种情况下,您可以将 Java 方法名称作为第一个 block 参数。
从您的示例来看,不清楚接口(interface)方法是什么,而且您似乎没有 JRuby block 到 iface 转换的用例,尤其是。因为你拥有一个国家。
关于Ruby 中的 Java 匿名接口(interface)实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33360641/