首页 > 编程语言 >java 事件回调的写法,使用回调接口方式

java 事件回调的写法,使用回调接口方式

时间:2024-07-04 15:22:40浏览次数:17  
标签:NettyClientEvent java RecMessage App 回调 接口方式 public

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

 

标签:NettyClientEvent,java,RecMessage,App,回调,接口方式,public
From: https://www.cnblogs.com/hailexuexi/p/18283833

相关文章

  • java第三十课 —— 面向对象练习题
    面向对象编程练习题第一题定义一个Person类{name,age,job},初始化Person对象数组,有3个person对象,并按照age从大到小进行排序,提示,使用冒泡排序。packagecom.hspedu.homework;importjava.util.SortedMap;publicclassHomework01{publicstaticvo......
  • 2024最新Java笔试题及答案,java高分面试指南
    一、mybatis:1、当实体类中的属性名和表中的字段名不一样,怎么办1、使用as关键字起别名​<sqlid="Base_Column_List"><!--数据库种表的字段as实体类属性-->uidasid,userNameasname,ageasage,emailasemail,create_timeascreateTime,update_timeas......
  • 优化代码以避免 ESLint 的 array-callback-return 错误,需要确保 map 函数中的每个回调
    要优化这段代码以避免ESLint的array-callback-return错误,你需要确保map函数中的每个回调都返回一个值或者通过早期返回来处理。在你的例子中,你只在满足特定条件时返回元素。ESLint的规则要求每个数组迭代都应有返回值,否则它会抛出警告。一种解决方案是在不满足任何条件......
  • 基于java+springboot+vue实现的校园外卖服务系统(文末源码+Lw)292
    摘   要传统信息的管理大部分依赖于管理人员的手工登记与管理,然而,随着近些年信息技术的迅猛发展,让许多比较老套的信息管理模式进行了更新迭代,外卖信息因为其管理内容繁杂,管理数量繁多导致手工进行处理不能满足广大用户的需求,因此就应运而生出相应的校园外卖服务系统。本......
  • JavaWeb—JDBC篇
    概述jdbc是javaWeb的技术框架定义JDBC(JavaDatabaseConnectivity)是一个独立于特定数据库管理系统、通用的SQL数据库存取和操作的公共接口(一组API),定义了用来访问数据库的标准Java类库,(java.sql,javax.sql)使用这些类库可以以一种标准的方法、方便地访问数据库资源。作用......
  • 基于java+springboot+vue实现的宠物商城网站(文末源码+Lw)273
    摘   要传统信息的管理大部分依赖于管理人员的手工登记与管理,然而,随着近些年信息技术的迅猛发展,让许多比较老套的信息管理模式进行了更新迭代,商品信息因为其管理内容繁杂,管理数量繁多导致手工进行处理不能满足广大用户的需求,因此就应运而生出相应的宠物商城网站。本宠物......
  • 面试官:Java类是如何被加载到内存中的?
    面试连环callJava类是如何被加载到内存中的?Java类的生命周期都有哪些阶段?JVM加载的class文件都有哪些来源?JVM在加载class文件时,何时判断class文件的格式是否符合要求?类生命周期一个类从被加载到虚拟机内存开始,到卸载出内存为止,它的整个生命周期将会经历加载、验证、准备、......
  • Java中的文件IO
    文件,我们之前在C语言中接触过,是在硬盘上存储数据的方式,操作系统帮我们把硬盘的一些细节都封装起来了,因此在这里我们只需要了解文件的相关接口即可.首先硬盘是用来存储数据的,和内存相比,硬盘的存储空间更大,访问速度更慢,成本更低,可以实现持久化存储,而操作系统通过"文......
  • JUC(java.util.concurrent)的常见类
    JUC(java.util.concurrent)的常见类Callable(这是一个interface接口)这个也是创建线程的一种方式Runnable能表示一个任务(run方法)返回:voidCallable也能表示一个任务(call方法)返回:一个具体的值,类型可以通过泛型参数来指定(Object)如果进行多线程操作,只是关心多线......
  • Java 中的字符串替换方法详解:replace, replaceAll 和 replaceFirst
    在Java中,字符串的替换是一种常见的操作,特别是在处理文本和格式化输出时。Java提供了几种不同的方法来实现字符串替换,其中包括replace,replaceAll和replaceFirst。本文将详细讨论这些方法的用法、区别以及示例。1.replace(CharSequencetarget,CharSequencereplaceme......