有哪位好心人,帮我看看这段程序!!一定给分!!!!!! 对于这段程序,accept的确没有作用,其实当在main中对DirFilte构造之后,就没有再用之accept必需显式地调用才可以起到作用 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 accept就是用来让你重载的,在list的时候由list自动调用类似的还有一些CellRender,CellEditor 这是Thinking in Java中的一个例子。在每次给list加一个element时,都会自动的调用accept函数。具体的可以看Thinking in Java(2nd),里面解释的很清楚。 list自动调用,无需自己显式调用 应该不是自动调用的,如果是那样的话,应该是和类名一样的函数,或者是系统内定的函数(比如,线程内的函数run就是自动调用的) jszj(一麦偶) 错~应该是自动调用,因为DirFilter实现了FilenameFilter接口,而File类的list()方法调用了FilenameFilter的accept()方法。有JSDK源码为证:public String[] list(FilenameFilter filter) { String names[] = list(); if ((names == null) || (filter == null)) { return names; } ArrayList v = new ArrayList(); for (int i = 0 ; i < names.length ; i++) { if (filter.accept(this, names[i])) { v.add(names[i]); } } return (String[])(v.toArray(new String[0])); } public static void main(String args[]) { File flDir = new File("."); System.out.println("Files in "+flDir.getAbsolutePath()); String strFiles[]; if(args[1].equals("*")) strFiles[]=flDir.list(new Filter(args[1])); else strFiles[] = flDir.list(); int intDirCount = 0, intFileCount = 0; long lngSize = 0; String dir = "dir", delTree = "delTree"; 那或许可以这样理解吧:如果开始那段程序是你自己写的,那么应该是不会自动调用的,但是,如果它是你从jdk的源代码中摘出来的,那那根据上边的这段代码,应该是自动调用的。为什么呢?1.如果是你自己写的,因为你没有调用那个函数,而且又不是构造函数,所以必需显式地调用2.如果是摘出来的,那么,这个调用是jdk的内部显式地调用了(从上边的代码可以看出),但做为我们使用的时候,由于没有涉及到内部的东西,因而对我们而言,就是自动调用了。这可以这样想,对于一辆汽车,从外部情况来说,没有动力去推动它,但是从汽车的内部来说,却有一个发动机在推它。(这个例子虽然不太好,但我想,还是能说明一点问题) 菜鸟求大神赐教哇~~~ 不让这个类启动 关于super的问题 Java客户端调用Java编写WebSerivice出现特别麻烦的问题。回答的都给分~~~~小弟先谢谢各位GGJJ了~~~~~~~ 大侠帮我看看错在哪里了这个程序 JTable 列粘贴 swing中有些类的Client Properties是什么意思? 用JAVA是不是要它的类库? 现在我要用JAVA 实现QQ 传文件,图片的功能,该怎么做? 小白求解 韩顺平老师教程里坦克大战的爆炸效果为什么是从第二个坦克爆炸才有 谁搞过JAVA的本地代码。 哪个大哥能给点意见??
在每次给list加一个element时,都会自动的调用accept函数。
具体的可以看Thinking in Java(2nd),里面解释的很清楚。
应该是自动调用,因为DirFilter实现了FilenameFilter接口,
而File类的list()方法调用了FilenameFilter的accept()方法。
有JSDK源码为证:
public String[] list(FilenameFilter filter) {
String names[] = list();
if ((names == null) || (filter == null)) {
return names;
}
ArrayList v = new ArrayList();
for (int i = 0 ; i < names.length ; i++) {
if (filter.accept(this, names[i])) {
v.add(names[i]);
}
}
return (String[])(v.toArray(new String[0]));
}
{
File flDir = new File(".");
System.out.println("Files in "+flDir.getAbsolutePath());
String strFiles[];
if(args[1].equals("*"))
strFiles[]=flDir.list(new Filter(args[1]));
else strFiles[] = flDir.list();
int intDirCount = 0, intFileCount = 0;
long lngSize = 0;
String dir = "dir", delTree = "delTree";
如果开始那段程序是你自己写的,那么应该是不会自动调用的,但是,如果它是你从jdk的源代码中摘出来的,那那根据上边的这段代码,应该是自动调用的。
为什么呢?
1.如果是你自己写的,因为你没有调用那个函数,而且又不是构造函数,所以必需显式地调用
2.如果是摘出来的,那么,这个调用是jdk的内部显式地调用了(从上边的代码可以看出),但做为我们使用的时候,由于没有涉及到内部的东西,因而对我们而言,就是自动调用了。这可以这样想,对于一辆汽车,从外部情况来说,没有动力去推动它,但是从汽车的内部来说,却有一个发动机在推它。(这个例子虽然不太好,但我想,还是能说明一点问题)