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

关于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条)

报告相同问题?