为什么在java中创建自定义事件时使用接口?
答案显示了在java中创建自定义事件的方法。我理解答案,但我想知道他为什么使用为什么在java中创建自定义事件时使用接口?,java,events,interface,Java,Events,Interface,答案显示了在java中创建自定义事件的方法。我理解答案,但我想知道他为什么使用HelloListener界面?我认为没有必要 我的代码: import java.util.ArrayList; import java.util.List; class Initiater { private List<Responder> listeners = new ArrayList<Responder>(); public void addListener(Re
HelloListener
界面?我认为没有必要
我的代码:
import java.util.ArrayList;
import java.util.List;
class Initiater {
private List<Responder> listeners = new ArrayList<Responder>();
public void addListener(Responder toAdd) {
listeners.add(toAdd);
}
public void sayHello() {
System.out.println("Hello!!");
for (Responder hl : listeners)
hl.someoneSaidHello();
}
}
class Responder {
public void someoneSaidHello() {
System.out.println("Hello there...");
}
}
public class Test {
public static void main(String[] args) {
Initiater initiater = new Initiater();
Responder responder = new Responder();
initiater.addListener(responder);
initiater.sayHello();
}
}
import java.util.ArrayList;
导入java.util.List;
类发起者{
私有列表侦听器=新的ArrayList();
public void addListener(响应程序toAdd){
添加(toAdd);
}
公共空间{
System.out.println(“你好!!”;
用于(响应者hl:侦听器)
有人说:();
}
}
类应答器{
有人说公共空间无效{
System.out.println(“你好…”);
}
}
公开课考试{
公共静态void main(字符串[]args){
启动器启动器=新启动器();
Responder Responder=新的Responder();
Initiator.addListener(响应者);
发起者:sayHello();
}
}
我想我写的代码也做了同样的事情。我可以这样做吗?你可以这样做,但这不是一个好的设计。使用接口的原因是为了解耦行为。如果您只有一个实现,并且该实现直接从“启动器”引用,则无需使用侦听器。侦听器的目的是将其解耦:“启动器”不知道侦听器可能做什么或侦听器可能是什么(即其类)。因为Java是静态类型的,所以必须定义一个接口。然后,侦听器的实现可以是单独的。它甚至可以在单独的项目中单独编译(例如在创建库时)。接口将使您能够拥有多种风格的侦听器
interface HelloListener {
void someoneSaidHello();
}
class Responder implements HelloListener {
@Override
public void someoneSaidHello() {
System.out.println("Hello there...");
}
}
class AnotherResponder implements HelloListener {
@Override
public void someoneSaidHello() {
System.out.println("Hello from Responder 2");
}
}
initiater.add(new Responder());
initiater.add(new AnotherResponder());
召唤
initiater.sayHello();
现在将输出
Hello there...
Hello from Responder 2