Java匿名内部类在什么时候用?
Java匿名内部类是一种没有名字的内部类,它通常用于实现接口或者继承类的一个实例,匿名内部类的主要优点是可以在创建对象的同时定义类,这样可以减少代码的冗余,匿名内部类也有一些缺点,比如不能使用this关键字引用外部变量,不能覆盖equals和hashCode方法等,在什么情况下使用Java匿名内部类呢?本文将从以下几个方面进行详细的介绍:
1、实现接口
当需要实现一个接口时,可以使用匿名内部类来创建该接口的实现类,这样做的好处是不需要创建一个单独的类,而是在需要的时候直接创建一个实例,我们有一个Runnable接口,需要在一个线程中执行某个任务:
public class Main { public static void main(String[] args) { Runnable runnable = new Runnable() { @Override public void run() { System.out.println("Hello, World!"); } }; Thread thread = new Thread(runnable); thread.start(); } }
2、继承类
当需要创建一个类的实例,但是不想继承这个类时,可以使用匿名内部类,这样做的好处是可以复用已有的代码,同时避免了不必要的继承关系,我们有一个Animal接口和一个Dog类,现在需要创建一个Dog实例:
public interface Animal { void speak(); } public class Dog implements Animal { @Override public void speak() { System.out.println("Woof!"); } } public class Main { public static void main(String[] args) { Animal animal = new Animal() { @Override public void speak() { System.out.println("汪汪汪!"); } }; animal.speak(); // 输出:汪汪汪! } }
3、实现Lambda表达式
在Java 8中,Lambda表达式成为了一种新的编程范式,Lambda表达式可以用来表示匿名内部类,使得代码更加简洁,我们有一个函数式接口Runnable,需要在一个线程中执行某个任务:
@FunctionalInterface public interface Runnable { void run(); }
使用Lambda表达式创建Runnable实例:
Runnable runnable = () -> System.out.println("Hello, World!"); Thread thread = new Thread(runnable); thread.start(); // 输出:Hello, World!
4、实现工具类的方法
有时候我们需要使用到某个工具类的方法,但是又不想继承这个工具类,这时,可以使用匿名内部类来实现这个方法,我们有一个工具类StringUtils,提供了一个判断字符串是否为空的方法isEmpty:
public class StringUtils { public static boolean isEmpty(String str) { return str == null || str.length() == 0; } }
使用匿名内部类实现isEmpty方法:
boolean isEmpty = StringUtils::isEmpty; // 直接调用isEmpty方法,无需创建StringUtils实例或继承其父类,isEmpty方法返回true,如果传入的参数为null或者长度为0,返回true;否则返回false。
原创文章,作者:酷盾叔,如若转载,请注明出处:https://www.kdun.com/ask/167128.html
本网站发布或转载的文章及图片均来自网络,其原创性以及文中表达的观点和判断不代表本网站。如有问题,请联系客服处理。
发表回复