Java匿名内部类与Lambda表达式

本文介绍了匿名内部类和Lambda表达式在Java编程中的应用,特别是在需要实现接口时的便捷性。匿名内部类简化了一次性使用的类创建,而Lambda表达式进一步减少了代码量,使得实现方法接口更为简洁。文章通过Arrays.sort()的例子展示了两种方式的使用,并指出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<Integer> {
        @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<Integer>(){ //匿名内部类
            @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表达式。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值