以下是 Java 泛型的基本概念和用法:
1. 泛型类:
在类的声明中使用泛型类型参数,以便在使用类时指定具体的类型。例如:
public class Box<T> {
private T value;
public T getValue() {
return value;
}
public void setValue(T value) {
this.value = value;
}
}
在实例化 Box 类时,可以指定具体的类型:
Box<Integer> integerBox = new Box<>();
integerBox.setValue(42);
Box<String> stringBox = new Box<>();
stringBox.setValue("Hello, Generics!");
2. 泛型方法:
在方法的声明中使用泛型类型参数,以便在调用方法时指定具体的类型。例如:
public <T> T genericMethod(T value) {
// 方法体
return value;
}
在调用泛型方法时,可以根据实际情况指定具体的类型:
Integer intValue = genericMethod(42);
String stringValue = genericMethod("Hello, Generics!");
3. 泛型接口:
接口也可以使用泛型类型参数,与泛型类类似。例如:
public interface Pair<K, V> {
K getKey();
V getValue();
}
在实现泛型接口时,需要指定具体的类型:
public class OrderedPair<K, V> implements Pair<K, V> {
private K key;
private V value;
// 实现方法...
}
4. 通配符(Wildcards):
使用通配符可以使泛型更加灵活。<?> 表示任意类型,<? extends T> 表示类型的上界,<? super T> 表示类型的下界。例如:
public void processList(List<?> list) {
// 处理任意类型的列表
}
public void processUpperBoundedList(List<? extends Number> list) {
// 处理元素为 Number 或其子类的列表
}
public void processLowerBoundedList(List<? super Integer> list) {
// 处理元素为 Integer 或其父类的列表
}
泛型提供了一种强大的机制,可以在编译时提供更好的类型检查,并减少在运行时出现类型错误的可能性。通过使用泛型,可以编写更加通用和可维护的代码。
转载请注明出处:http://www.zyzy.cn/article/detail/13496/Java