[开发|java] java将匿名函数(匿名内部类)转换为非匿名函数

本文讲述了如何将匿名内部类在Java代码中的数据库查询监听器转换为非匿名类CustomRowListener,提高代码可读性和重用性。作者详细展示了类的创建和在run方法中的应用过程。
摘要由CSDN通过智能技术生成

将以下这段匿名函数代码转化为非匿名函数代码

@Override
public void run() {
    Database.open("default");
    try {
        Date deadline = new Date(
                System.currentTimeMillis() - delaySeconds * 1000);
        new DB("default")
                .find("select path from delay_delete_files where task_given_id= ? and created_at < ?",
                        taskGivenId, deadline)
                .with(new RowListenerAdapter() {
                    @Override
                    public void onNext(Map<String, Object> row) {
                        DeleteFileAfterSent.delete(
                                new File(row.get("path").toString()));
                        DelayDeleteFile.delete("task_given_id = ? and path = ?", taskGivenId, row.get("path").toString());
                    }
                });
    } finally {
        Database.close("default");
    }
} 

为了将匿名函数(匿名内部类)转换为非匿名函数,我们可以创建一个新的类来实现RowListenerAdapter接口,并将相关的逻辑放入这个新类的方法中。以下是修改后的代码示例:

首先,创建一个新的类CustomRowListener,继承自RowListenerAdapter

class CustomRowListener extends RowListenerAdapter {
    private final String taskGivenId;

    public CustomRowListener(String taskGivenId) {
        this.taskGivenId = taskGivenId;
    }

    @Override
    public void onNext(Map<String, Object> row) {
        DeleteFileAfterSent.delete(new File(row.get("path").toString()));
        DelayDeleteFile.delete("task_given_id = ? and path = ?", taskGivenId, row.get("path").toString());
    }
}

然后,在原来的run方法中,使用新创建的CustomRowListener类替换匿名内部类的实例:

@Override
public void run() {
    Database.open("default");
    try {
        Date deadline = new Date(System.currentTimeMillis() - delaySeconds * 1000);
        new DB("default")
                .find("select path from delay_delete_files where task_given_id= ? and created_at < ?",
                        taskGivenId, deadline)
                .with(new CustomRowListener(taskGivenId));
    } finally {
        Database.close("default");
    }
}

这样,我们就将匿名函数转换为了一个具有名字的类CustomRowListener,它使得代码更加清晰,易于理解和维护。同时,通过构造函数传递参数taskGivenId,使得该监听器可以在不同上下文中复用。

  • 6
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值