自定义监听器

博客针对现实处理逻辑中,当msg='放假了'时,Teacher、Student、Parent分别做相应动作,每次都写重复代码太麻烦的问题,提出采用监听器解决。介绍了解决步骤,包括定义接口、实现类、消息分发器和main函数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

解决的问题:

现实处理逻辑中,我们经常遇到这种逻辑,当msg="放假了"的时候,Teacher,Student,Parent分别做出相应的动作(doMyEvent)

一般这样写:

if( msg.equalsIgnoreCase("放假了")){
    teacher.doMyEvent();
    student.doMyEvent();
    parent.doMyEvent();
}

每次有消息发送过来,都要写这几行,显然太麻烦,我们采用监视器,注册一次,就可对消息进行分发

1. 定义接口 

public interface MyListener {
    public void doMyEvent();
}

2.定义Teacher/Student/Parent的实现类

public class TeacherListener implements MyListener {

    @Override
    public void doMyEvent() {
        // TODO Auto-generated method stub
        System.out.println("老师舒心了");
    }

}
public class StudentListener implements MyListener {

    @Override
    public void doMyEvent() {
        // TODO Auto-generated method stub
        System.out.println("学生开心了");
    }

}

 

public class ParentListener implements MyListener {

    @Override
    public void doMyEvent() {
        // TODO Auto-generated method stub
        System.out.println("父母闹心了");
    }

}

3.定义消息分发器

public class MyNotice {
    //监听器容器
    private List<MyListener> listener = new ArrayList<MyListener>();
    //给事件绑定监听器
    public void addMyListener(MyListener ren) {
        listener.add(ren);
    }
    //事件触发器
    public void tellMe(String msg) {
        if(msg.equalsIgnoreCase("放假了")) {
            Iterator<MyListener> iterator = listener.iterator();
            while(iterator.hasNext()) {
                MyListener ren = iterator.next();
                ren.doMyEvent();
            }
        }
    }
}

4.定义main函数

public class Main {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        MyNotice notice = new MyNotice(); 
        notice.addMyListener(new TeacherListener());
        notice.addMyListener(new StudentListener());
        notice.addMyListener(new ParentListener());
        
        String msg = "放假了";
        notice.tellMe(msg);
    }

}

 

 

 

 

 

 

### 如何在EasyExcel中实现自定义监听器 在EasyExcel中,`AnalysisEventListener` 是核心组件之一,它允许开发者通过继承该接口来自定义监听逻辑。以下是关于如何实现自定义监听器的具体方法: #### 1. 创建自定义监听器自定义监听器需要继承 `AnalysisEventListener<T>` 类型,并重写其主要方法。这些方法会在Excel解析的不同阶段被调用。 ```java import com.alibaba.excel.context.AnalysisContext; import com.alibaba.excel.event.AnalysisEventListener; public class CustomListener extends AnalysisEventListener<YourDataEntity> { @Override public void invoke(YourDataEntity data, AnalysisContext context) { // 单条数据处理逻辑 System.out.println("当前行的数据:" + data); } @Override public void doAfterAllAnalysed(AnalysisContext context) { // 所有数据解析完成后执行的操作 System.out.println("所有数据解析完成!"); } } ``` 上述代码展示了如何创建一个简单的自定义监听器[^2]。其中: - `invoke` 方法会在每读取到一条记录时触发。 - `doAfterAllAnalysed` 方法会在整个Excel文件解析完毕后触发。 #### 2. 配置并使用监听器 为了使自定义监听器生效,在读取Excel文件时需将其作为参数传递给 `EasyExcel.read()` 方法。 ```java import com.alibaba.excel.EasyExcel; public class ExcelReaderExample { public static void main(String[] args) { String fileName = "path/to/your/excel/file.xlsx"; EasyExcel.read(fileName, YourDataEntity.class, new CustomListener()).sheet().doRead(); } } ``` 此部分代码演示了如何配置并启动基于自定义监听器的Excel读取流程[^1]。 #### 3. 处理异常情况(可选) 如果希望捕获解析过程中可能出现的错误,可以覆盖 `onException` 方法。 ```java @Override public void onException(Exception exception, AnalysisContext context) throws Exception { // 错误处理逻辑 System.err.println("发生错误:" + exception.getMessage()); throw exception; // 可选择抛出或忽略 } ``` 以上扩展功能有助于增强程序健壮性。 --- ### 示例总结 通过继承 `AnalysisEventListener` 并实现相应的方法,能够灵活控制Excel文件的读取行为。无论是单条数据处理还是整体分析结束后的收尾工作都可以在此基础上定制开发[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值