iteye_18612 2009-09-06 14:04
浏览 177
已采纳

关于FilenameFilter的accept的回调

THINK IN JAVA中代码:
[code="java"]
import java.io.*;
import java.util.*;
import java.util.regex.*;
public class DirList{
public static void main(String args[]){
File path = new File("D:\NpagE");
String list[];
if(args.length==0){
list = path.list();
}else{
list = path.list(new DirFilter(args[0]));
}
for(int i=0;i<list.length;i++){
System.out.println(list[i]);
}
}

}

public class DirFilter implements FilenameFilter{
private Pattern pattern;
public DirFilter(String regex){
pattern = Pattern.compile(regex);
}
public boolean accept(File dir,String name){
return pattern.matcher(new File(name).getName()).matches();
}
}
[/code]
说accept是回调函数,不理解这个为什么是回调函数呢?明明是在list(FilenameFilter)中直接调用的。

回调函数不应该像是下面这个样子的吗
[code="java"]
public class A{

public void aaa(){

B b = new B();

b.action(this);

}

public void bbb(){}

}

public class B{

public void action(A a){

a.bbb();

}

}
[/code]
高手给解释下,这个FilenameFilter中accept()方法为什么是回调函数。
[b]问题补充:[/b]
那么回调函数是什么模式或者是哪几种模式?
还有如何理解FilenameFilter的accept为回调函数呢?
[b]问题补充:[/b]

上面的例子的调度模式是如下图所示吧:但是在下图并没看见“回调”啊
[img]http://dl.iteye.com/upload/attachment/143515/ed2db1a2-2e88-30ef-9da5-80683ecbed3f.jpg[/img]
[align=center]图一[/align]

[img]http://dl.iteye.com/upload/attachment/143523/8f90949e-66a0-37d5-9a7c-13410106c140.jpg[/img]
[align=center]图二[/align]

[b]问题补充:[/b]
To atian25
恩,是理解有问题。

[code="java"]public class A{

public void aaa(){

B b = new B();

b.action(this);

}

public void bbb(){}

}

public class B{

public void action(A a){

a.bbb();

}

}[/code]

这段代码中bbb()是回调函数吧?

另外:
“list = path.list(new DirFilter(args[0]));
把DirFilter的accept方法给了file.list来调用.这就是回调.
而不是说在accept方法里面调用外面的使用者 ”
您的这段话最后一句,不是我想的。我想的是accpet必须放在使用file.list中,例如:此例,accept必须放在调用了file.list的DirList中。

我可以这样理解你最后一句话么:
而不是在file.list中调用外面使用者的accept方法。

[b]问题补充:[/b]
难道java必须要通过接口传递function吗,下面这段代码中bbb()算不算回调函数呢?
[code="java"]public class A{

public void aaa(){

B b = new B();

b.action(this);

}

public void bbb(){}

}

public class B{

public void action(A a){

a.bbb();

}

} [/code]

  • 写回答

7条回答 默认 最新

查看更多回答(6条)

报告相同问题?

悬赏问题

  • ¥15 聚类分析或者python进行数据分析
  • ¥15 如何用visual studio code实现html页面
  • ¥15 逻辑谓词和消解原理的运用
  • ¥15 三菱伺服电机按启动按钮有使能但不动作
  • ¥15 js,页面2返回页面1时定位进入的设备
  • ¥50 导入文件到网吧的电脑并且在重启之后不会被恢复
  • ¥15 (希望可以解决问题)ma和mb文件无法正常打开,打开后是空白,但是有正常内存占用,但可以在打开Maya应用程序后打开场景ma和mb格式。
  • ¥20 ML307A在使用AT命令连接EMQX平台的MQTT时被拒绝
  • ¥20 腾讯企业邮箱邮件可以恢复么
  • ¥15 有人知道怎么将自己的迁移策略布到edgecloudsim上使用吗?