java - FilenameFilter接口中,accept 方法回调问题
迷茫
迷茫 2017-04-17 17:27:02
0
3
1476
  1. 见下面的程序,这个回调是怎么发生的啊?从程序中怎么看不出逻辑,都没有调用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)
左手右手慢动作

簡単に言うと、フィルタをリストに追加するときに、フィルタで定義された条件を使用して処理が行われます

いいねを押す +0
迷茫

accept メソッドは file.list で呼び出されます。File クラスのソース コードを開いて、呼び出しプロセスを明確に確認できます。以下は、File クラスからコピーした list メソッドです。

リーリー
いいねを押す +0
左手右手慢动作

コールバックの意味は、インターフェイス (インターフェイスである必要はありません) を実装しますが、このインターフェイスを呼び出すのではなく、このインターフェイスを定義する側 (これは Java クラス ライブラリを参照する必要があります) を呼び出すことを意味します。あなたが与えた実装。

要件を満たすサブディレクトリを一覧表示する操作にはいくつかの手順が含まれており、その一部は変更されていません (たとえば、最初に現在のディレクトリ内のすべてのサブディレクトリを取得する必要があります。ソース コードは見ていませんが、そうであるはずです)これらは、Java クラス ライブラリで実装されます。このステップに対応するのは変更操作、つまりサブディレクトリがどのような条件を満たすようにするかという操作です。したがって、クラス ライブラリは、変更のこの部分を実装するためのインターフェイスとして設計し、File.list() を通じてコールバックを登録します。

あなたが電話しないから、それがコールバックと呼ばれるのです - 電話しないでください、私が折り返し電話します


または、より直接的には、accept(File, String) の呼び出しは File.list(FilenameFilter) 関数内で発生します。関数内では、パラメーター dirname が指定した実装に渡されます。つまり、accept(File, String) メソッドが呼び出されます。

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート