在Java中使用接口触发从类A到类B的事件

在Java中使用接口触发从类A到类B的事件,java,interface,listener,Java,Interface,Listener,假设我定义了一个具有如下接口的类: public class myClass { public void test() { //here I want to trigger `onStartListener` } interface OnStartListener { public void onStart(); } } public class ClassB implements myClass.OnStartListene

假设我定义了一个具有如下接口的类:

public class myClass {

    public void test() {
        //here I want to trigger `onStartListener`
    }

    interface OnStartListener {
        public void onStart();
    }
}
public class ClassB implements myClass.OnStartListener {
    public void ClassB() {
        myClass test1 = new myClass();
        myClass.test();
    }

    @Override
    public void onStart() {
        System.out.println("start triggered");
    }
}
B类的定义如下:

public class myClass {

    public void test() {
        //here I want to trigger `onStartListener`
    }

    interface OnStartListener {
        public void onStart();
    }
}
public class ClassB implements myClass.OnStartListener {
    public void ClassB() {
        myClass test1 = new myClass();
        myClass.test();
    }

    @Override
    public void onStart() {
        System.out.println("start triggered");
    }
}

如何从
myClass
test
方法触发
OnStartListener
,以便
ClassB
可以处理它?

是的,您需要订阅您的侦听器并在类A中调用该方法:

public class ClassB implements myClass.OnStartListener {
    public void ClassB() {
        myClass test1 = new myClass(this);
        //test1.setListener(this);
        myClass.test();
    }

    @Override
    public void onStart() {
        System.out.println("start triggered");
    }
}


看看swing之类的框架是如何处理侦听器的。基本上,您需要使用
myClass
来“注册”侦听器实例(
ClassB
实例),并在其上调用
onStart()


ClassB
可能包含一个
列表,该列表在循环中使用,并且对每个元素调用
onStart()
。注册意味着将
ClassB的实例分配到该列表中。

如何?我想从
myClass
触发,ClassB已经订阅了侦听该事件。是否可能不使用
setListener
,而是直接在构造函数中使用
this
来实例化
OnStartListener
?例如:this.myListener=(OnStartListener)this;我看到了你最新的答案。。。但我的意思是。我正在初始化
myClass
已经在
ClassB
中,就像这样<代码>新建myClass()
。如果我在myClass构造函数中直接使用
this
而不是在其中传递引用:
this.myListener=(OnStartListener)this
,这会起作用吗?因为我认为它已经有了对启动器的引用。this.myListener=这不起作用,因为myClass正在接收接口,但我的类没有实现该接口。