java - FilenameFilter接口中,accept 方法回调问题
迷茫
迷茫 2017-04-17 17:27:02
0
3
1489
  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)
左手右手慢动作

간단히 말하면 필터를 목록에 추가할 때 필터에 정의된 조건을 사용하여 발생합니다

迷茫

accept 메소드는 file.list 클래스의 소스 코드를 열면 호출 과정을 명확하게 볼 수 있습니다. 아래는 File 클래스에서 복사한 File 메소드입니다. list 으아아아

左手右手慢动作

콜백의 의미는 인터페이스(반드시 인터페이스일 필요는 없음)를 구현하지만 이 인터페이스를 호출하지 않고 이 인터페이스(Java 클래스 라이브러리를 참조해야 함)를 정의하는 당사자가 사용자가 제공한 구현을 호출하도록 한다는 것입니다. .

요구 사항을 충족하는 하위 디렉터리를 나열하는 작업에는 여러 단계가 포함되며 그 중 일부는 변경되지 않습니다(예를 들어 먼저 현재 디렉터리의 모든 하위 디렉터리를 가져와야 합니다. 소스 코드는 본 적이 없지만 그래야 합니다. OS의 시스템 호출) 이는 Java 클래스 라이브러리에서 구현됩니다. 이 단계에 해당하는 것은 변경 작업, 즉 하위 디렉터리가 어떤 조건을 충족하기를 원하는지입니다. 따라서 클래스 라이브러리는 이 변경 부분을 사용자가 구현할 인터페이스로 설계한 다음 File.list()을 통해 콜백을 등록합니다.

전화가 안 오니까 콜백이라고 부르죠. 전화하지 마세요. 제가 다시 전화할게요


또는 보다 직접적으로 accept(File, String) 호출은 File.list(FilenameFilter) 함수 내에서 발생합니다. 함수 내에서 dirname 매개변수가 사용자가 제공한 구현에 전달됩니다. 즉, accept(File, String) 메서드가 호출됩니다.

최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿