C/C++あがりで最近Javaを始めたんだが

public static FilenameFilter getFileExtensionFilter(String extension)
{
    final String _extension = extension;
    return new FilenameFilter()
    {
        public boolean accept(File file, String name)
        {
            boolean ret = name.endsWith(_extension);
            return ret;
        }
    };
}

という処理を見かけたのだけど
これってどういう処理なんだ

return new FilenameFilter()の呼ばれどころがわからないし
その中で関数を定義しているし
意味が分からない