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>
类型的参数,可以接受Integer
或Double
等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中通配符的使用有了更深入的理解。上界通配符和无界通配符在实际开发中都有着重要的作用,能够帮助我们更加灵活地处理不同类型的数据。在编写泛型代码时,合理使用通配符将能够提高代码的灵活性和可维护性。希望本文对读者有所帮助!