第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

FilenameFilter接口中,accept 方法回調(diào)問題

FilenameFilter接口中,accept 方法回調(diào)問題

慕妹3146593 2019-03-21 18:15:11
見下面的程序,這個(gè)回調(diào)是怎么發(fā)生的???從程序中怎么看不出邏輯,都沒有調(diào)用accept ()?import java . io . File ;import java . io . * ;import java . util . * ;import java . util . regex . * ;public class DirList{        public static void main (String [ ] args)        {                File path = new File (".") ;                 String[ ] list ;                if ( args . length == 0 )                {                        list = path . list ( ) ;                }                else                 {                        list = path . list (new DirFilter ( args [ 0 ])) ;                 }                Arrays . sort (list , String . CASE_INSENSITIVE_ORDER );                for (String dirItem : list )                     System . out . println (dirItem) ;                }}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 ( name ) . matches (  ) ;        }}
查看完整描述

3 回答

?
四季花海

TA貢獻(xiàn)1811條經(jīng)驗(yàn) 獲得超5個(gè)贊

accept方法在file.list里面調(diào)用的,樓主可以打開File類的源代碼,很清楚的看到調(diào)用流程,下面是我從File類里面復(fù)制出來的list方法

    public String[] list(FilenameFilter filter) {

        String names[] = list();

        if ((names == null) || (filter == null)) {

            return names;

        }

        List<String> v = new ArrayList<>();

        for (int i = 0 ; i < names.length ; i++) {

            if (filter.accept(this, names[i])) {

                v.add(names[i]);

            }

        }

        return v.toArray(new String[v.size()]);

    }


查看完整回答
反對(duì) 回復(fù) 2019-04-17
?
呼啦一陣風(fēng)

TA貢獻(xiàn)1802條經(jīng)驗(yàn) 獲得超6個(gè)贊

回調(diào)的意思就是,你實(shí)現(xiàn)一個(gè)接口(不一定非得是接口),但不去調(diào)用這個(gè)接口,而是讓定義這個(gè)接口的一方(這里應(yīng)該指Java類庫(kù))去調(diào)用你給的實(shí)現(xiàn)。

list出滿足要求的子目錄這個(gè)操作,涉及若干步驟,有些是不變的(比如都需要首先得到當(dāng)前目錄下的所有子目錄,沒有看過源碼,但應(yīng)該是OS的系統(tǒng)調(diào)用),這些都實(shí)現(xiàn)在Java類庫(kù)里的。與這個(gè)步驟對(duì)應(yīng)的是變化的操作,也就是你要子目錄滿足什么條件。所以類庫(kù)把變化的這部分設(shè)計(jì)成接口,讓你去實(shí)現(xiàn),你再通過File.list()去注冊(cè)你的回調(diào)。

因?yàn)槟悴徽{(diào)用,所以才叫回調(diào)呀 - don't call me, I'll call back


或者更直接一點(diǎn),accept(File, String)的調(diào)用發(fā)生在File.list(FilenameFilter)函數(shù)內(nèi)。在函數(shù)內(nèi),會(huì)將參數(shù)dirname傳遞給你給的實(shí)現(xiàn),也就是調(diào)用accept(File, String)方法。


查看完整回答
反對(duì) 回復(fù) 2019-04-17
?
MYYA

TA貢獻(xiàn)1868條經(jīng)驗(yàn) 獲得超4個(gè)贊

簡(jiǎn)單說就是在list的時(shí)候,用你filter 中定義的條件發(fā)生的


查看完整回答
反對(duì) 回復(fù) 2019-04-17
  • 3 回答
  • 0 關(guān)注
  • 784 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)