亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Industrial programming >> java

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

  1. Java Numbers 类 – 包装类与继承详解
  2. Java 文档注释精通:Javadoc 工具与注释类型全解析
  3. Java 发送邮件完整指南:从基础到进阶实战
  4. Java 选择排序详解:核心原理、完整代码与步骤演示
  5. 掌握 Java 自动装箱与拆箱:实战示例与最佳实践
  6. JDK、JRE 与 JVM 深度解析:核心区别、协作关系与工作原理
  7. Java 变量与数据类型完全指南(含示例)
  8. Java throw 与 throws 深度解析:异常处理实战指南
  9. Java 8 函数式接口大全:java.util.function 包 43 个核心接口
  10. Java break 语句:用法、时机与标签 break 详解
  11. 精通 Java ConcurrentHashMap:操作、示例与最佳实践
  12. 精通 Java 匿名内部类:定义、语法与实战示例