在以下场景中,Main.registerEvents(Listener)是游戏API的事件系统的一部分.假设它应该使用@EventHandler注释注册任何方法.
public abstract class Spell implements Listener {
protected Spell() {
Main.getInstance().registerEvents(this);
}
@EventHandler
public void onMove(PlayerMoveEvent event) {
}
}
Run Code Online (Sandbox Code Playgroud)
public class Fireball extends Spell {
@EventHandler
public void onChat(PlayerChatEvent event) {
}
}
Run Code Online (Sandbox Code Playgroud)
一般来说,既然this是指当前实例,那么Fireball.onChat(PlayerChatEvent)注册的可能性如何呢?
一般来说,由于这是指当前实例,Fireball.onChat(PlayerChatEvent)如何注册呢?
因为当你构造一个实例时Fireball,this指的Fireball是在执行时构造的.在编译时的类型this是Spell的,但如果你打印出来this.getClass()(即使是在Spell构造函数),它会显示Fireball.
因此,如果registerEvents查看对象的执行时类型并使用反射查找事件处理程序,它将会看到onChat.
| 归档时间: |
|
| 查看次数: |
177 次 |
| 最近记录: |