基本概念:
泛型的基本思想是将类、接口、方法中的数据类型参数化,使得这些类、接口、方法可以操作不同类型的数据而不失去类型安全性。
泛型类:
public class Box<T> {
private T value;
public T getValue() {
return value;
}
public void setValue(T value) {
this.value = value;
}
}
// 使用泛型类
Box<Integer> integerBox = new Box<>();
integerBox.setValue(42);
Box<String> stringBox = new Box<>();
stringBox.setValue("Hello, Generics!");
泛型方法:
public class GenericMethods {
// 泛型方法
public <T> void printArray(T[] array) {
for (T element : array) {
System.out.print(element + " ");
}
System.out.println();
}
public static void main(String[] args) {
GenericMethods genericMethods = new GenericMethods();
// 调用泛型方法
Integer[] intArray = {1, 2, 3, 4, 5};
String[] stringArray = {"apple", "banana", "orange"};
genericMethods.printArray(intArray);
genericMethods.printArray(stringArray);
}
}
泛型通配符:
public class WildcardExample {
// 泛型方法使用通配符
public static void printList(List<?> list) {
for (Object element : list) {
System.out.print(element + " ");
}
System.out.println();
}
public static void main(String[] args) {
List<Integer> integerList = Arrays.asList(1, 2, 3, 4, 5);
List<String> stringList = Arrays.asList("apple", "banana", "orange");
// 调用泛型方法
printList(integerList);
printList(stringList);
}
}
上下界通配符:
public class WildcardBounds {
// 上界通配符
public static double sumOfList(List<? extends Number> list) {
double sum = 0.0;
for (Number number : list) {
sum += number.doubleValue();
}
return sum;
}
// 下界通配符
public static void addIntegers(List<? super Integer> list) {
list.add(42);
}
public static void main(String[] args) {
List<Integer> integerList = Arrays.asList(1, 2, 3, 4, 5);
List<Double> doubleList = Arrays.asList(1.1, 2.2, 3.3, 4.4, 5.5);
// 上界通配符
System.out.println("Sum of integers: " + sumOfList(integerList));
System.out.println("Sum of doubles: " + sumOfList(doubleList));
// 下界通配符
List<Object> objectList = new ArrayList<>();
addIntegers(objectList);
System.out.println("List of integers: " + objectList);
}
}
Java 泛型为编写类型安全且通用的代码提供了强大的工具。通过使用泛型,可以在编译时检测类型错误,提高了代码的可读性和可维护性。
转载请注明出处:http://www.zyzy.cn/article/detail/434/Java