在Java中,泛型(Generics)是一种编程范式,它允许在定义类、接口和方法时使用类型参数(type parameters)。这些类型参数在实例化类、实现接口或调用方法时会被具体的类型所替代,从而提供了编译时的类型检查,增强了代码的重用性和类型安全性。
泛型的主要优点包括:
1. 类型安全:泛型允许编译器在编译时检查类型错误,从而避免了运行时类型转换异常。
2. 代码重用:使用泛型可以减少重复的代码,因为你可以编写与类型无关的代码,然后将其应用于多种类型。
3. 清晰性:使用泛型可以使代码更清晰,因为你不需要在代码中显式地进行类型转换。
泛型类
泛型类是在类声明中声明类型参数的类。下面是一个简单的泛型类的例子:
public class Box<T> {
private T t;
public void set(T t) {
this.t = t;
}
public T get() {
return t;
}
public static void main(String[] args) {
Box<Integer> integerBox = new Box<>();
integerBox.set(10);
System.out.println(integerBox.get()); // 输出10
Box<String> stringBox = new Box<>();
stringBox.set("Hello");
System.out.println(stringBox.get()); // 输出Hello
}
}
泛型通配符
在使用泛型时,有时你可能需要处理未知类型的集合。Java提供了通配符(wildcards)来处理这种情况。通配符主要有两种:
public class BeanCopyUtils {
private BeanCopyUtils() {
}
public static <V> V copyBean(Object source, Class<V> clazz) {
// 创建目标对象
V result = null;
try {
result = clazz.newInstance();
// 实现属性copy
BeanUtils.copyProperties(source, result);
} catch (Exception e) {
e.printStackTrace();
}
// 返回结果
return result;
}
public static <O, V> List<V> copyBeanList(List<O> list, Class<V> clazz) {
return list.stream()
.map(o -> copyBean(list, clazz))
.collect(Collectors.toList());
}
}
开始学java了么,加油
学完了
学这么快
现在开始写项目啦