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() );
      }
}        

 

posted @ 2024-07-04 15:10  海乐学习  阅读(55)  评论(0编辑  收藏  举报