Java Ruby 中的匿名接口实现

Java Anonymous Interface implementation in Ruby

我想在 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.找到打印机() 2.发现完成() 3.发现错误() 我认为,在创建它的实例(在上面的例子中是 discoveryHandler)时应该被覆盖。我不知道。 提前致谢。

如果接口只有一个方法(或者它是一个 Java 8 功能的方法),你可以简单地通过在一个地方使用一个块来实现它,一个方法将 DiscoveryHandler 作为它的最后一个参数例如:

someJavaObject.registerHandler do |printer| # foundPrinter(printer)
  printers.add printer # assuming registerHandler(DiscoveryHandler)
end

也可以使用单个块实现多个接口方法,在这种情况下,您将获得 Java 方法名称作为第一个块参数。

从你的样本中看不清楚接口方法是什么,你似乎没有 JRuby 块到 iface 转换的用例,尤其是。因为你持有状态。