将以下这段匿名函数代码转化为非匿名函数代码
@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,使得该监听器可以在不同上下文中复用。