我正在尝试使用Java的Bonjour。我找到了一个如何去做的例子,我想我明白了。但我仍不明白为何要以这么复杂的方式进行。可能是我错过了什么。
因此,我找到的代码的工作方式如下(代码也给出如下)。
以下是代码:
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!
}
});用以下方式组织代码不是更简单吗?
还是我只是不习惯OOP的思维方式?
发布于 2010-03-07 17:10:24
与其说是“面向对象的思维方式”,不如说是“异步思维方式”。通过对可能需要一段时间的操作使用回调函数,您可以在等待操作完成时停止执行其他操作(或保持GUI响应)。
发布于 2010-03-07 17:16:09
当然,有很多不同的方法来处理“问题”。这里采用的方法是回调方法:您调用resolve方法并将其交给一个方法(实际上,它是一个包含方法的对象,因为Java没有匿名方法或闭包等等)。一旦该解析器成功地解决了您希望它解决的任何问题,它将调用您给它的serviceResolved方法(然后该方法对解析器提供的信息进行处理)。
这意味着它是一种异步方法,而不是OO。您可以在Resolver“工作”时执行其他操作,serviceResolved方法将在某个时候被调用,因此不需要等待。
发布于 2010-03-07 17:12:47
另外,该代码是Java -> -> C代码。这件事没什么可说的。它是带有Java包装器的异步过程代码。
https://stackoverflow.com/questions/2397063
复制相似问题