Java菱形操作符:简化Java 7+泛型代码
Java菱形操作符
Java 7引入菱形操作符(`<>`),旨在提升泛型代码可读性。泛型是一种参数类型,允许向类方法传递任意对象进行处理。例如,Java 7前创建字符串列表需写完整类型参数:
List<String> listOfStrings = new ArrayList<String>();
Java 7起可用菱形操作符简化:
List<String> listOfStrings = new ArrayList<>();
但匿名内部类不支持。例如Java 9前无法在菱形操作符中省略对象类型:
Handler<Integer> intHandler = new Handler<Integer>(1) {
@Override public void handle() { System.out.println(content); }
};
匿名类中的菱形操作符
Java 9起,菱形操作符支持匿名类,进一步简化代码、提升可读性:
Handler<Integer> intHandler = new Handler<>(1) {
@Override public void handle() { System.out.println(content); }
};
Java 7/8中的菱形操作符
下例创建抽象类Handler的匿名类,接受泛型参数,创建时必须传入类型参数否则编译报错:
示例
public class Tester {
public static void main(String[] args) {
// 创建处理1的匿名类
// Java 9前菱形操作符必须传类型参数,否则编译错误
Handler<Integer> intHandler = new Handler<Integer>(1) {
@Override public void handle() { System.out.println(content); }
};
intHandler.handle();
// 创建处理2的匿名类
Handler<? extends Number> intHandler1 = new Handler<Number>(2) {
@Override public void handle() { System.out.println(content); }
};
intHandler1.handle();
Handler<?> handler = new Handler<Object>("test") {
@Override public void handle() { System.out.println(content); }
};
handler.handle();
}
}
abstract class Handler<T> {
public T content;
public Handler(T content) { this.content = content; }
abstract void handle();
}
输出
1 2 Test
Java 9及以后的菱形操作符
Java 9起,匿名类也可用`<>`操作符:
示例
下例创建Handler匿名类,接受泛型参数但创建时无需传类型,编译器自动推断:
public class Tester {
public static void main(String[] args) {
// 创建处理1的匿名类
// Java 9编译器自动推断类型,无需在菱形操作符传类型参数
Handler<Integer> intHandler = new Handler<>(1) {
@Override public void handle() { System.out.println(content); }
};
intHandler.handle();
Handler<? extends Number> intHandler1 = new Handler<>(2) {
@Override public void handle() { System.out.println(content); }
};
intHandler1.handle();
Handler<?> handler = new Handler<>("test") {
@Override public void handle() { System.out.println(content); }
};
handler.handle();
}
}
abstract class Handler<T> {
public T content;
public Handler(T content) { this.content = content; }
abstract void handle();
}
输出
1 2 Test
java
- Java Numbers 类 – 包装类与继承详解
- Java 文档注释精通:Javadoc 工具与注释类型全解析
- Java 发送邮件完整指南:从基础到进阶实战
- Java 选择排序详解:核心原理、完整代码与步骤演示
- 掌握 Java 自动装箱与拆箱:实战示例与最佳实践
- JDK、JRE 与 JVM 深度解析:核心区别、协作关系与工作原理
- Java 变量与数据类型完全指南(含示例)
- Java throw 与 throws 深度解析:异常处理实战指南
- Java 8 函数式接口大全:java.util.function 包 43 个核心接口
- Java break 语句:用法、时机与标签 break 详解
- 精通 Java ConcurrentHashMap:操作、示例与最佳实践
- 精通 Java 匿名内部类:定义、语法与实战示例