内部类的n种写法

发布时间 2023-11-03 20:54:08作者: Nightblow

最近在学习java,在实现接口的时候常常因为不够偷懒而被idea打脸。

举个例子,File.listFiles()需要一个实现FileFilter的类

刚开始,萌新的我:咦,我的myFileFilter下面怎么有条黄线?

private class myFileFilter implements FileFilter{

        @Override
        public boolean accept(File pathname) {
            return pathname.isDirectory();
        }
    }
File[] s = file.listFiles(new myFileFilter());

学了匿名内部类之后

File[] s = file.listFiles(new FileFilter() {
            @Override
            public boolean accept(File pathname) {
                return pathname.isDirectory();
            }
        });

ok,简化了不少,但是new怎么变黑了,难道new可以不写?

指针停在上面,idea说可以被lambda取代

原来在接口只有一个方法需要实现方法的时候可以有一个更简化的写法

 File[] s = file.listFiles((File pathname) -> pathname.isDirectory());

lambda表达式

但是pathname.isDirectory()还是有黄线

好吧,当只需要返回参数的一个方法值的时候只用写类名:方法名

File[] s = file.listFiles(File::isDirectory);

这就是我目前接触到的四种写法,欢迎在下面补充