java 事件回调的写法,使用回调接口方式
java编写时,尤其是先用C#语言后转成java的,在编程时一定会遇到,java中没有委托事件的概念。
那主类App.java类中实例了一个 A对象,那A对象因为某种原因触发了一个事件,想回调App.java中的一个函数,应该怎么写呢?
在java中有多有方法来实现,这里讲下 回调接口方式,我感觉这种方式比较好理解。
以 Netty写的 收发消息的客户端为例
新建一个接口类 INettyClientEventListener.java 文件
当然这个接口类中可以写多个回调函数(事件)
public interface INettyClientEventListener { void NettyClientEvent_RecMessage(String message); }
在 App.java 类中 继承它
public class App implements INettyClientEventListener {
在 App.java 类中 实现 NettyClientEvent_RecMessage(String message) 函数
//NettyClient收到消息事件---------------------------------------------- public void NettyClientEvent_RecMessage(String message) { // 执行你希望执行的逻辑 System.out.println("Received message: " + message); }
在 NettyClientHandler.java 也就是你想回调App.java函数的类中 写在哪里触发事件
定义这个 事件监听的接口
private INettyClientEventListener nettyClientEventListener;
在实例化函数中 给它赋 New App()
public NettyClientHandler(Bootstrap bootstrap,EventLoopGroup group ) { this.bootstrap = bootstrap; this.group=group; this.nettyClientEventListener = new App(); }
在收到消息的函数中触发 事件回调
@Override public void channelRead(ChannelHandlerContext ctx, Object msg) { try { // 处理接收到的消息 System.out.println("收到消息: " + msg); //触发事件,回调App.java中的NettyClientEvent_RecMessage()函数 nettyClientEventListener.NettyClientEvent_RecMessage(msg.toString()); }catch (Exception ex){ System.out.println( "NettyClientHandler channelRead() 收到消息时,出现异常 "+ ex.toString() ); } }