Java匿名内部类与Lambda表达式

Java匿名内部类与Lambda表达式,第1张

Java匿名部类与Lambda表达式        匿名内部类

       匿名内部类的作用是提供便捷的接口实现。在一些情况下,方法会使用接口作为参数,此时通过创建类并实现接口进行参数的传递。但是,有时候该类只需创建一次,如果用传统的创建类并实现接口的方法过于繁琐,因此用匿名类可以用匿名内部类实现。

        例如,Arrays.sort()中,重写比较器,就可以通过匿名内部类来实现。

public class Test {
    public static void main(String[] args) {
        Integer[] nums = new Integer[]{1, 2, 3, 4, 5, 6};
        //重写Comparator类中的compare方法
        Cmp cmp = new Cmp();
        Arrays.sort(nums, cmp);
        System.out.println(Arrays.toString(nums));
    }

    static class Cmp implements Comparator {
        @Override
        public int compare(Integer o1, Integer o2) {
            return o2 - o1;
        }
    }
}

         在未使用匿名内部类的情况下,需要创建新的类。

public class Test {
    public static void main(String[] args) {
        Integer[] nums = new Integer[]{1, 2, 3, 4, 5, 6};
        //重写Comparator类中的compare方法
        Arrays.sort(nums,new Comparator(){ //匿名内部类
            @Override
            public int compare(Integer o1, Integer o2) {
                return o2-o1;
            }
        });
        System.out.println(Arrays.toString(nums));
    }
}

         当使用匿名内部类后就无需再创建类,大大简化了代码。 

Lambda表达式

         Lambda表达式为接口中抽象方法的实现,其作用是简化匿名内部类实现代码作为方法接口实现参数的传递。

         Lambda表达式语法

()->{}
或者
(参数)->{}

        例如,在Arrays.sort()中

public class Test {
    public static void main(String[] args) {
        Integer[] nums = new Integer[]{1, 2, 3, 4, 5, 6};
        //Lambda表达式重写Comparator类中的compare方法
        Arrays.sort(nums, ((o1, o2) -> (o2 - o1)));
        System.out.println(Arrays.toString(nums));
    }
}

     Lambda表达式也有局限性,对于一个类中有多个抽象方法时,就不能使用Lambda表达式。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5695476.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存