Java 知道什么时候是听众';s方法已被调用

Java 知道什么时候是听众';s方法已被调用,java,Java,我正在努力用谷歌搜索这个主题。我不能使用正确的搜索词。我有一个位置监听器,在Android中,我通常将监听器嵌套在我使用它的类中 public class ClassName { ... private class Listener implements SomeListener{ ... public void somethingChanged(){ ... } } } 这一次,我决定让监听器成为

我正在努力用谷歌搜索这个主题。我不能使用正确的搜索词。我有一个位置监听器,在Android中,我通常将监听器嵌套在我使用它的类中

public class ClassName {
    ...
    private class Listener implements SomeListener{
        ...
        public void somethingChanged(){
            ...
        }
    }
}
这一次,我决定让监听器成为一个新类,以使代码更易于阅读,从而可以重用它。现在我的监听器和使用监听器的类是分开的

public class ClassName{
    ...
}

public class Listener implements SomeListener{
    ...
    public void somethingChanged(){
        ...
    }
}

因此,在
somethingChanged()
方法中,我只想通知我的主类发生了一个事件,以便进行一些更新。我想不出一个办法。我不能在侦听器的方法中放入任何特定的内容,或者它是不可重用的。如何使从监听器调用的方法调用类中使用监听器的方法?

好吧,你看,内部类知道外部类,自从你分离了类之后,情况就不再是这样了


我建议将
ClassName
的实例传递给构造函数中的
Listener
,并从
somethingChanged

中调用
ClassName
的公共方法,这样我就不能将侦听器与其他类一起重用。或者我可以照你说的做,但是让任何想要使用监听器的类实现一个方法,在触发事件时监听器调用这个方法。这听起来像是一件我没有意识到或没有联系到的普通事情。我将对此进行研究。@l3v:然后介绍一个接口,该接口具有在事件发生时调用的方法。您的类可以实现此接口,您可以将其传递给侦听器。@l3v:。。。或者可能使侦听器成为泛型类。您需要知道应该调用哪个方法,尽管=>接口是一个更好的主意。@l3v:另一个想法是在
ClassName
内部使用从
Listener
派生的本地匿名类,实现所需的回调函数作为对
ClassName
方法的调用。可惜Java没有委托。我同意,委托会很好。谢谢你提供的信息。这是要走的路吗,都铎?或者我应该总是嵌套侦听器吗?当您希望实体通知其他实体更改时,观察者模式是一种通用模式,而不需要紧密耦合它们的实现。使用观察者模式是解决问题的一种优雅方式,当然,除非你不能只嵌套类并完成它。我想我每次都会嵌套类。