Java中通配符的使用

通配符是Java泛型中一种非常重要的概念,它使得我们能够在不确定泛型类型的情况下,依然能够安全地操作数据。通配符主要包括上界通配符和无界通配符两种类型。本文将介绍Java中通配符的使用方法,并结合代码示例详细说明。

上界通配符

上界通配符使用? extends T形式,表示通配符的类型必须是T或者是T的子类。在实际开发中,上界通配符常用于读取数据。

下面是一个简单的示例代码:

import java.util.ArrayList;
import java.util.List;

public class UpperBoundWildcard {
    public static double sumOfList(List<? extends Number> list) {
        double sum = 0;
        for (Number n : list) {
            sum += n.doubleValue();
        }
        return sum;
    }

    public static void main(String[] args) {
        List<Integer> intList = new ArrayList<>();
        intList.add(1);
        intList.add(2);
        intList.add(3);

        System.out.println("Sum of integers: " + sumOfList(intList));

        List<Double> doubleList = new ArrayList<>();
        doubleList.add(1.5);
        doubleList.add(2.5);
        doubleList.add(3.5);

        System.out.println("Sum of doubles: " + sumOfList(doubleList));
    }
}

在上面的示例中,sumOfList方法接受一个List<? extends Number>类型的参数,可以接受IntegerDouble等Number的子类的List。这样我们可以传入不同类型的List进行计算。

无界通配符

无界通配符使用?表示,表示通配符的类型可以是任意类型。在实际开发中,无界通配符常用于写入数据。

下面是一个简单的示例代码:

import java.util.ArrayList;
import java.util.List;

public class UnboundedWildcard {
    public static void printList(List<?> list) {
        for (Object o : list) {
            System.out.print(o + " ");
        }
        System.out.println();
    }

    public static void main(String[] args) {
        List<Integer> intList = new ArrayList<>();
        intList.add(1);
        intList.add(2);
        intList.add(3);

        printList(intList);

        List<String> strList = new ArrayList<>();
        strList.add("Hello");
        strList.add("World");

        printList(strList);
    }
}

在上面的示例中,printList方法接受一个List<?>类型的参数,可以接受任意类型的List。这样我们可以传入不同类型的List进行打印。

类图

下面是通配符示例代码中的类图:

classDiagram
    class Number
    class Integer
    class Double
    class List
    Number <|-- Integer
    Number <|-- Double
    Number <|-- List
    List <|-- ArrayList

通过本文的介绍,相信读者对Java中通配符的使用有了更深入的理解。上界通配符和无界通配符在实际开发中都有着重要的作用,能够帮助我们更加灵活地处理不同类型的数据。在编写泛型代码时,合理使用通配符将能够提高代码的灵活性和可维护性。希望本文对读者有所帮助!