Java 泛型 Generic机制实例详解
什么是Java泛型
Java泛型是指在实例化的时候,根据指定的类型参数来定义一种通用的数据类型,这样一来,在编码阶段就可以确定类型,并且能够在编译阶段对不合法类型的代码进行检查,保证程序的类型安全性。
泛型类
public class Box<T> {
private T data;
public Box(T data) {
this.data = data;
}
public T getData() {
return this.data;
}
}
上面这个例子就定义了一个泛型类Box,使用T来表示一个占位符,实际运行时可以指定T的类型。
当我们使用泛型类时,可以通过以下方式指定泛型的类型:
Box<String> box = new Box<>("hello world");
String str = box.getData();
上述代码中,我们指定了泛型类Box的类型为String类型,并实例化了一个Box对象,实际上Box实例化成了Box
泛型方法
在Java中,当只需要在某个方法中使用泛型时,可以使用泛型方法。定义泛型方法的方式为,在方法的返回类型前面加上尖括号,指定泛型占位符。例如下面这个例子:
public class GenericMethodDemo {
public static <T> void printArray(T[] array) {
for (T element : array) {
System.out.print(element + " ");
}
System.out.println();
}
public static void main(String[] args) {
Integer[] array1 = { 1, 2, 3, 4, 5 };
Double[] array2 = { 1.1, 2.2, 3.3, 4.4, 5.5 };
Character[] array3 = { 'H', 'E', 'L', 'L', 'O' };
printArray(array1);
printArray(array2);
printArray(array3);
}
}
上述代码中,我们定义了一个名为printArray
的泛型方法,该方法接收一个数组参数并打印该数组中的所有元素,并且可以处理不同类型的数组。
泛型实例
下面再来看一个示例。假设我们需要定义一个Map工具类,将一些key-value对存储在一个map中,使用泛型可以让这个工具类支持不同类型的key和value。下面是该工具类的示例代码:
public class MapUtils<K, V> {
private Map<K, V> map;
public MapUtils() {
map = new HashMap<>();
}
public void put(K key, V value) {
map.put(key, value);
}
public V get(K key) {
return map.get(key);
}
public static void main(String[] args) {
MapUtils<String, Integer> mapUtils = new MapUtils<>();
mapUtils.put("one", 1);
mapUtils.put("two", 2);
System.out.println(mapUtils.get("one"));
System.out.println(mapUtils.get("two"));
MapUtils<Integer, String> mapUtils1 = new MapUtils<>();
mapUtils1.put(1, "one");
mapUtils1.put(2, "two");
System.out.println(mapUtils1.get(1));
System.out.println(mapUtils1.get(2));
}
}
上述代码中,我们使用泛型类MapUtils来实现一个Map工具类,使用K和V表示key和value类型,可以通过put
和get
方法来操作Map中的key-value对,并且可以支持不同类型的key和value。
总结
Java泛型机制是提高Java类型安全的一种方法。通过使用泛型,我们可以在编码阶段确定数据的类型,并且能够在编译阶段对不合法类型的代码进行检查。本文主要介绍了Java泛型的基本原理,以及如何在Java程序中使用泛型类、泛型方法、泛型实例等。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java 泛型 Generic机制实例详解 - Python技术站