» 您尚未登录:请 登录 | 注册 | 标签 | 帮助 | 小黑屋 |


 41 123
发新话题
打印

java编程思想有一个例子没看懂,求指点。。。

posted by wap, platform: Android
就是这段代码

不明白DirFilter类的accept()是怎么被调用的?

书上说是list()可以回调accept(),没看懂是什么原理。。。
附件: 您所在的用户组无法下载或查看附件


TOP

posted by wap, platform: 小米5
accept是FilenameFilter接口定义的一个方法,DirFilter类实现了FilenameFilter接口,当它的实例被传给path.list方法时,accept方法会被调用多次。
你书看得太快了,还是从头看起吧,基础打稳先。



本帖最近评分记录
  • shixn 激骚 +1 最骚 Rated by wap 2017-7-6 11:46

TOP

posted by wap, platform: Android
是File类的list方法


本帖最近评分记录
  • shixn 激骚 +1 最骚 Rated by wap 2017-7-6 11:47

TOP

posted by wap, platform: Android
引用:
原帖由 @总是注册不成功  于 2017-7-6 09:56 发表
accept是FilenameFilter接口定义的一个方法,DirFilter类实现了FilenameFilter接口,当它的实例被传给path.list方法时,accept方法会被调用多次。
你书看得太快了,还是从头看起吧,基础打稳先。
就是说自动调用?

刚才又翻了翻接口那一章。。还是没理解。。

TOP

posted by wap, platform: Android
引用:
原帖由 @yfl2  于 2017-7-6 10:00 发表
是File类的list方法
list方法会去调用accept?

这部分代码是封装好的没显示出来?

TOP

posted by wap, platform: iPhone
你的目的是打印某个目录下符合某命名规则的文件或目录。

public String[] list(FilenameFilter filter)
这个函数返回指定目录下,符合Filter的文件或文件夹的名字。

然后你定义了一个DirFilter,这个类实现了filter的API accept()。那你这个accept当然会被执行咯。
本帖最近评分记录
  • shixn 激骚 +1 最骚 Rated by wap 2017-7-6 11:47

TOP

posted by wap, platform: 小米5
很简单的道理,你把它传给path.list方法,path.list肯定要调它的方法啊,要不然有什么用?至于怎么调,java源代码都有,想看进去看就是了。

TOP

posted by wap, platform: iPhone
public String[] list(FilenameFilter filter)

会对这么目录下的每一个文件都用Accept()进行检测,满足则放入数组输出。

TOP

File类就好像一个施工队,施工队里头有流程是筛沙(accept),原来有专人干这事,而且干这事需要有筛沙证(接口)!
现在有个新项目,要求有新的筛沙工艺,所以包工头(码农,就是你),找了个新人回来,名字叫DirFilter,你先让他考个筛沙证(继承接口),并让他学会新的筛沙工艺(实现accept方法),最后你把新人换掉原本的那个筛沙的哥们(path.list(new DirFilter()))
这样干活的时候,前一个环节的哥们把粗沙丢给这个新人,然后对他吼“筛沙”(调用accept),负责筛沙的新人就老老实实的按照他学的筛沙工艺筛沙,筛完的沙给下一个工人(return)……
这里头最大的优点就是,其实包工头也不需要知道施工流程究竟是怎样的,反正他知道,只要找个有筛沙证的哥们,并且告诉他新的筛沙工艺(实现accept),这包工队就会像以前那样工作!
其实面向对象开发里头,处处都是这种结构,简单来说,为什么要面向对象开发,要的就是这个目的!


[ 本帖最后由 cf3b5 于 2017-7-6 10:45 编辑 ]
本帖最近评分记录
  • dataeast 激骚 +1 精品文章 2017-7-6 12:45
  • gogoler 激骚 +1 最骚 Rated by wap 2017-7-6 11:11
  • 土豆茄子 激骚 +1 恭喜发财 2017-7-6 10:56
  • jun4rui 激骚 +1 最骚 Rated by wap 2017-7-6 10:55

TOP

posted by wap, platform: Android
引用:
原帖由 @shixn  于 2017-7-6 10:20 发表
list方法会去调用accept?

这部分代码是封装好的没显示出来?
你直接拿File来用,哪里来的代码?

TOP

posted by wap, platform: Android
File类难道不是java封装好的吗?!
import java.io.*了啊

list()方法不就类似于C语言的fopen(),fclose()之类的,我给他传参,不用关心内部实现。。。是这意思吧。。。?

只不过list()函数接收一个接口对象,然后内部调用接口对象的accept(),至于具体怎么调用,不必关心,是这意思吧。。。

TOP

posted by wap, platform: Android
你可以关心,看它怎么调用的accept,这个过程本身的原理有啥疑问?

本帖最后由 yfl2 于 2017-7-6 10:55 通过手机版编辑

TOP

引用:
原帖由 shixn 于 2017-7-6 10:20 发表
posted by wap, platform: Android
list方法会去调用accept?

这部分代码是封装好的没显示出来?
确实不用显示,accept这本来就是file类里头的细节,你通过文档了解到有这个环节就行了,细节不用去关心!
实话说我觉得要学好OO,首先就要习惯不要每个环节都去挖代码,本来oo目的就是为了封装之后屏蔽这些细节的,要养成抽象的去思考问题
本来一个项目随随便便几十万上百万的代码,没这个抽象的概念,老是去挖代码,还搞个P啊……

TOP

引用:
原帖由 cf3b5 于 2017-7-6 10:36 发表
File类就好像一个施工队,施工队里头有流程是筛沙(accept),原来有专人干这事,而且干这事需要有筛沙证(接口)!
现在有个新项目,要求有新的筛沙工艺,所以包工头(码农,就是你),找了个新人回来,名字叫DirF ...
挺有意思

TOP

简而言之,LZ不但需要搞清楚接口的定义,同时也要搞清楚接口这东西诞生的目的和使用原则。

TOP

 41 123
发新话题
     
官方公众号及微博