java 中泛型的用法
时间: 2024-09-03 13:03:36 浏览: 88
Java1.5泛型指南
泛型是Java编程语言中的一个功能,它允许在定义类、接口和方法时使用类型参数。泛型的主要目的是为了提供更强的类型检查和消除代码中的类型转换。泛型可以用在类、接口、方法和构造器中,并且可以应用于任何类型,包括基本类型。
泛型的基本用法可以分为以下几类:
1. 泛型类和接口
使用泛型类和接口可以编写更为通用的代码,不依赖于指定的具体数据类型。例如:
```java
public class Box<T> {
private T t; // T stands for "Type"
public void set(T t) {
this.t = t;
}
public T get() {
return t;
}
}
```
在这个例子中,`Box<T>`是一个泛型类,`T`是一个类型变量,表示该类的实例可以存储任何类型的对象。
2. 泛型方法
泛型方法可以在普通的非泛型类中定义。例如:
```java
public class Util {
public static <K, V> boolean compare(Pair<K, V> p1, Pair<K, V> p2) {
return p1.getKey().equals(p2.getKey()) &&
p1.getValue().equals(p2.getValue());
}
}
```
这个`compare`方法使用了两个类型参数`K`和`V`,并应用于`Pair<K, V>`类型的参数。
3. 泛型通配符
泛型通配符`<?>`用于创建那些可以工作于多种不同数据类型的泛型类或方法。例如:
```java
public void processElements(List<?> elements) {
for(Object element : elements) {
// do something with element
}
}
```
在这里,`processElements`方法可以处理任何类型的`List`对象。
4. 类型通配符的界限
使用`extends`关键字定义泛型类型的上界,用于限制泛型变量的类型。例如:
```java
public class Processора<T extends Number> {
public void process(T element) {
// do something with T
}
}
```
`Processora<T>`类中的泛型类型`T`只能是`Number`或其子类。
5. 泛型的类型擦除
Java的泛型是通过类型擦除来实现的,这意味着在运行时,泛型信息将不会存在。所有的泛型信息在编译器编译时会被擦除。
阅读全文