我正在尝试使用Java的Bonjour。我找到了一个如何做的例子,我想我理解了。但是我仍然不明白为什么应该以这种复杂的方式进行。可能是我想念的东西。

因此,code I found以以下方式工作(代码也在下面给出)。


Java程序尝试查找服务,如果找到该服务,则该程序尝试“解析”该服务(我认为“解析服务”的意思是“使用服务”或“连接至服务”)。
要“解析”找到的服务,我们需要调用“ DNSSD.resolve”方法,作为该方法的最后一个参数,我们需要提供一个对象。
“ DNSSD.resolve”尝试解析给定的服务。如果“ DNSSD.resolve”能够解析服务,它将调用作为最后一个参数给出的实例的“ serviceResolved”方法。如果“ DNSSD.resolve”无法解析服务,则ti调用上述对象的“ operationFailed”方法。


这是代码:

DNSSD.resolve(0, ifIndex, serviceName, regType, domain, new ResolveListener(){
                public void serviceResolved(DNSSDService resolver, int flags, int ifIndex,
                String fullname, String hostname, int port, TXTRecord txtRecord){
                    InetAddress theAddress;
                    try {
                        theAddress = InetAddress.getByName(hostname);
                    } catch (UnknownHostException e) {
                        // ouch..
                    }
                }

                public void operationFailed(DNSSDService arg0, int arg1) {
                    // ouch, again!
                }
            });


通过以下方式组织代码会不会更简单。


我们使用有关我们要解析的服务的信息来调用“ DNSSD.resolve”方法。
我们不会将任何对象传递给“ DNSSD.resolve”。
“ DNSSD.resolve”不调用任何类的任何方法。
“ DNSSD.resolve”尝试“解析”给定的服务,并且在能够做到的情况下,“ DNSSD.resolve”返回true。否则,它返回false。
该程序根据“ DNSSD.resolve”返回的值运行“ serviceResolved”或“ operationFailed”方法。


还是我只是不习惯OOP的思维方式?

最佳答案

与其说“异步思维方式”,不如说是“面向对象的思维方式”。通过在可能需要一段时间的操作上使用回调函数,您可以在等待操作完成时关闭其他操作(或仅使GUI保持响应)。

10-01 09:03
查看更多