Ruby中的Java匿名接口实现

时间:2015-10-27 05:39:21

标签: java ruby jruby

我想在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)被创建时,应该重写它。我不确定。 提前谢谢。

1 个答案:

答案 0 :(得分:1)

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

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

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

从你的样本中不清楚界面方法是什么,你似乎似乎没有JRuby block-to-iface转换的用例,尤其是因为你正处于一个州。