匿名内部类
匿名内部类的作用是提供便捷的接口实现。在一些情况下,方法会使用接口作为参数,此时通过创建类并实现接口进行参数的传递。但是,有时候该类只需创建一次,如果用传统的创建类并实现接口的方法过于繁琐,因此用匿名类可以用匿名内部类实现。
例如,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表达式。
本文介绍了匿名内部类和Lambda表达式在Java编程中的应用,特别是在需要实现接口时的便捷性。匿名内部类简化了一次性使用的类创建,而Lambda表达式进一步减少了代码量,使得实现方法接口更为简洁。文章通过Arrays.sort()的例子展示了两种方式的使用,并指出Lambda表达式不适用于有多个抽象方法的接口。
1149

被折叠的 条评论
为什么被折叠?



