首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为何要以这么复杂的方式进行呢?这是一种客观的思维方式吗?

为何要以这么复杂的方式进行呢?这是一种客观的思维方式吗?
EN

Stack Overflow用户
提问于 2010-03-07 17:01:49
回答 6查看 475关注 0票数 2

我正在尝试使用Java的Bonjour。我找到了一个如何去做的例子,我想我明白了。但我仍不明白为何要以这么复杂的方式进行。可能是我错过了什么。

因此,我找到的代码的工作方式如下(代码也给出如下)。

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

以下是代码:

代码语言:javascript
复制
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!
                }
            });

用以下方式组织代码不是更简单吗?

  1. 我们使用有关要解析的服务的信息调用"DNSSD.resolve“方法。
  2. 我们不会将任何对象传递给"DNSSD.resolve“。
  3. "DNSSD.resolve“不调用任何类的任何方法。
  4. "DNSSD.resolve“试图”解析“给定的服务,如果它能够这样做,"DNSSD.resolve”将返回true。否则,它将返回false。
  5. 程序运行"serviceResolved“或"operationFailed”方法,具体取决于"DNSSD.resolve“返回的值。

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

EN

回答 6

Stack Overflow用户

发布于 2010-03-07 17:10:24

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

票数 4
EN

Stack Overflow用户

发布于 2010-03-07 17:16:09

当然,有很多不同的方法来处理“问题”。这里采用的方法是回调方法:您调用resolve方法并将其交给一个方法(实际上,它是一个包含方法的对象,因为Java没有匿名方法或闭包等等)。一旦该解析器成功地解决了您希望它解决的任何问题,它将调用您给它的serviceResolved方法(然后该方法对解析器提供的信息进行处理)。

这意味着它是一种异步方法,而不是OO。您可以在Resolver“工作”时执行其他操作,serviceResolved方法将在某个时候被调用,因此不需要等待。

票数 4
EN

Stack Overflow用户

发布于 2010-03-07 17:12:47

另外,该代码是Java -> -> C代码。这件事没什么可说的。它是带有Java包装器的异步过程代码。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2397063

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档