en.setHappened();
en.doWork();
EventNotifier en2 = new EventNotifier(new InterestingEvent(){
public void interestingEvent() {
System.out.println("inputtext change ");
}
});
en2.setHappened();
en2.doWork();
}
}
//这个类是用来测试的
public class JavaInterfaceCallBack {
public static void main(String[] args) {
ChangeNameTest.test();
EventNotifierTest.test();
}
}
/*
* 考虑这样一个应用:希望在某个事件发生时得到通知
*/
interface InterestingEvent {
public void interestingEvent();
}
class EventNotifier {
private InterestingEvent ie; //写成private List
private boolean somethingHappened;
public EventNotifier(InterestingEvent ie) {
this.ie = ie;
this.somethingHappened = false;
}
public void setHappened() {
this.somethingHappened = true;
}
public void doWork() {
if (somethingHappened) {
ie.interestingEvent();
}
}
}
class ButtonPressedEvent implements InterestingEvent {
@SuppressWarnings("unused")
private EventNotifier en;
public ButtonPressedEvent() {
en = new EventNotifier(this);
}
public void interestingEvent() {
System.out.println("button pressed ");
}
}
class EventNotifierTest {
public static void test() {
//这里有两种调用方法。其中第二种采用匿名内部类,其原理跟上面“改变Client名字”是一样的
EventNotifier en = new EventNotifier(new ButtonPressedEvent());
en.doWork();
EventNotifier en2 = new EventNotifier(new InterestingEvent(){
public void interestingEvent() {
System.out.println("inputtext change ");
}
});
en2.setHappened();
en2.doWork();
}
}
//这个类是用来测试的
public class JavaInterfaceCallBack {
public static void main(String[] args) {
ChangeNameTest.test();
EventNotifierTest.test();
}
}
下面给出回调的模型和另一个实例以便我们更好的学习
[java] /*
* Java里面的接口回调,最简单的情况示意如下
*/
interface A {}
class B implements A {}
class C implements A {}
class Test {
A b = new B();
A c = new C();
}
/*
* Java里面的接口回调,最简单的情况示意如下
*/
interface A {}
class B implements A {}
class C implements A {}
class Test {
A b = new B();
A c = new C();
}
[java] view plaincopyprint /*
* 考虑这样一个应用: NameChanger动态地改变Client的名字
* 那NameChanger的changeName方法就要接收一个Client对象,然后获取(调用)Client的名字并作不同的处理
* Client也要持有NameChanger,因为要打印改变后的名字
*/
class Client {
private INameChanger changer;
private String clientName;
public Client(INameChanger changer) {
this.changer = changer;
}
public void showMyNewName() {
String newName = changer.changeName(Client.this);
System.out.println(newName);
}
public String getName() {
return clientName;
}
public void setName(String clientName) {
this.clientName = clientName;
}