Java 一个对象能知道从哪个对象调用它的方法吗?
在Moritz Haarmann的博客中,我发现了一个。下面是代码:Java 一个对象能知道从哪个对象调用它的方法吗?,java,oop,class,methods,Java,Oop,Class,Methods,在Moritz Haarmann的博客中,我发现了一个。下面是代码: public class ServiceAnnouncer implements IServiceAnnouncer, RegisterListener { private DNSSDRegistration serviceRecord; private boolean registered; public boolean isRegistered(){ return register
public class ServiceAnnouncer implements IServiceAnnouncer, RegisterListener {
private DNSSDRegistration serviceRecord;
private boolean registered;
public boolean isRegistered(){
return registered;
}
public void registerService() {
try {
serviceRecord = DNSSD.register(0,0,null,"_killerapp._tcp", null,null,1234,null,this);
} catch (DNSSDException e) {
// error handling here
}
}
public void unregisterService(){
serviceRecord.stop();
registered = false;
}
public void serviceRegistered(DNSSDRegistration registration, int flags,String serviceName, String regType, String domain){
registered = true;
}
public void operationFailed(DNSSDService registration, int error){
// do error handling here if you want to.
}
}
我有一个关于“serviceRegistered”方法的问题。据我所知,它是在服务注册期间(或之后)调用的(它将变量“registed”设置为等于“true”)。但我不清楚的是它的确切名称。因为服务是通过方法“registerService”注册的。此方法依次调用“DNSSD.register”。而且,据我所知,“DNSSD.register”将调用“ServiceAnnouncer”类的“serviceRegister”方法。但“DNSSD.register”如何知道它需要调用“ServiceAnnouncer”类的方法呢?“DNSSD.register”是否可以知道它是从特定类调用的(在本例中为“ServiceAnnouncer”类) ServiceAnnouncer已将自身作为
DNSSD.register()
方法的最后一个参数传递,该方法显然需要RegisterListener
的任何实例。通过这种方式,DNSSD
可以直接处理ServiceAnnouncer
实例。ServiceAnnouncer
已将自身作为DNSSD.register()
方法的最后一个参数传递,该方法显然需要RegisterListener
的任何实例。通过这种方式,DNSSD
可以直接处理ServiceAnnouncer
实例。这个类似乎是一个侦听器,即RegisterListener
。通过将自身传递到寄存器(..)
方法,它已在DNSSD
中注册为侦听器
有关的详细信息,请阅读。这个类似乎是一个侦听器,即
RegisterListener
。通过将自身传递到寄存器(..)
方法,它已在DNSSD
中注册为侦听器
欲了解更多信息,请阅读。无关,但您希望删除接口前面的“I”,以遵循Java编码标准(以及您的Java程序员同事的可读性)。是的,但我在编写代码时并不完全了解Java编码标准。:-)与此无关,但是为了遵循Java编码标准(以及您的Java程序员同事的可读性),您确实希望删除接口前面的“I”。是的,但在编写代码时,我并不完全了解Java编码标准。:-)谢谢你的回答。这很有道理。但我不明白,为什么说“DNSSD.register()”需要一个RegisterListener实例?它需要一个使用RegisterListener作为接口的类的实例。您也可以将其理解为:一个实现
RegisterListener
的实例。谢谢您的回答。这很有道理。但我不明白,为什么说“DNSSD.register()”需要一个RegisterListener实例?它需要一个使用RegisterListener作为接口的类的实例。您也可以将其理解为:一个实现RegisterListener
的实例。