Java接受一个泛型参数
Java是一种面向对象的编程语言,支持泛型(Generic)类型。泛型允许我们在定义类、接口或方法时,使用一个占位符来表示类型,然后在实际使用时指定具体的类型。这种方式可以增加代码的灵活性和可重用性。
什么是泛型?
泛型是Java中的一个重要概念,它允许我们定义一个可以适用于多种类型的类、接口或方法。使用泛型可以在编译时进行类型检查,避免在运行时出现类型转换异常。泛型类型参数用尖括号<>
括起来,放在类名或方法名的后面。
泛型类
泛型类是指具有一个或多个类型参数的类。通过使用泛型类,我们可以创建可以适用于多种类型的对象。
下面是一个示例代码:
public class Box<T> {
private T content;
public void setContent(T content) {
this.content = content;
}
public T getContent() {
return content;
}
}
在上面的代码中,Box
类使用了一个泛型类型参数<T>
。这个类型参数可以在类的内部作为一种普通类型来使用,用来声明属性、方法参数和返回值类型。
我们可以使用Box
类来创建不同类型的盒子对象:
Box<Integer> intBox = new Box<>();
intBox.setContent(10);
int value = intBox.getContent(); // 行内代码:int
在上面的代码中,我们创建了一个Box
对象,其中的类型参数指定为Integer
。我们可以将整数类型的值存入盒子中,并通过getContent
方法获取盒子中的内容。
泛型方法
除了可以在类中定义泛型类型参数,我们还可以在方法中定义泛型类型参数。这样的方法被称为泛型方法。
下面是一个示例代码:
public class MathUtils {
public static <T extends Number> double average(T[] numbers) {
double sum = 0;
for (T number : numbers) {
sum += number.doubleValue();
}
return sum / numbers.length;
}
}
在上面的代码中,average
方法是一个泛型方法,它使用了一个泛型类型参数<T>
。这个类型参数被限制为Number
或其子类。
我们可以使用average
方法来计算一组数字的平均值:
Integer[] numbers = {1, 2, 3, 4, 5};
double avg = MathUtils.average(numbers); // 行内代码:double
在上面的代码中,我们使用了一个Integer
类型的数组作为方法的参数,并通过泛型类型推断,自动确定了泛型类型参数<T>
的具体类型。
泛型接口
泛型接口是指具有一个或多个类型参数的接口。通过使用泛型接口,我们可以定义可以适用于多种类型的实现类。
下面是一个示例代码:
public interface Collection<E> {
void add(E element);
void remove(E element);
boolean contains(E element);
}
在上面的代码中,Collection
接口使用了一个泛型类型参数<E>
。这个类型参数可以在接口的方法中作为一种普通类型来使用,用来声明方法参数和返回值类型。
我们可以实现Collection
接口来创建不同类型的集合类:
public class ArrayList<E> implements Collection<E> {
private List<E> elements = new ArrayList<>();
public void add(E element) {
elements.add(element);
}
public void remove(E element) {
elements.remove(element);
}
public boolean contains(E element) {
return elements.contains(element);
}
}
在上面的代码中,ArrayList
类实现了Collection
接口,并指定了泛型类型参数<E>
为集合元素的类型。通过实现Collection
接口,我们可以创建不同类型的集合对象。
总结
泛型是Java中一个非常重要的特性,它允许我们编写更通用、可重用的代码。通过使用泛型,我们可以定义可以适用于多种类型的类、接口或方法,并在实