目录
什么是泛型
泛型是Java SE 5中引入的一个新特性,它提供了编译时类型安全检测机制,该机制允许程序员在编译时检测到非法的类型。简单来说,泛型是一种参数化类型,它可以将类型(类、接口、枚举等)作为参数传递给类、接口或方法。这样,你就可以创建更加灵活和可重用的代码。
泛型的作用
- 类型安全:泛型的主要目标是提高代码的类型安全性。使用泛型,你可以在编译时检查类型错误,而不是在运行时。
- 消除类型转换:使用泛型后,很多情况下你可以避免显式的类型转换,因为编译器会帮你处理这些转换。
- 提高代码的重用性:泛型使得代码更加通用,可以应用于多种类型,从而提高代码的重用性。
- 清晰的代码:使用泛型可以让代码更加清晰,因为它明确了操作的类型。
泛型的特性
- 类型参数化:泛型允许在类、接口和方法中定义类型参数。
- 类型擦除:泛型信息只存在于编译时,在运行时,Java的泛型是通过类型擦除来实现的。这意味着泛型信息会被擦除,替换为它们的限定类型(如Object)。
- 限定类型:你可以为泛型指定一个或多个限定类型,这些限定类型可以是类也可以是接口。
- 通配符:泛型中的通配符(
?
)用于表示未知的类型。
泛型的使用
泛型类
public class Box<T> {
private T t;
public void set(T t) { this.t = t; }
public T get() { return t; }
}
// 使用
Box<Integer> integerBox = new Box<>();
integerBox.set(123);
Integer integer = integerBox.get();
泛型接口
public interface Pair<K, V> {
public K getKey();
public V getValue();
}
// 实现
class OrderedPair<K, V> implements Pair<K, V> {
private K key;
private V value;
public OrderedPair(K key, V value) {
this.key = key;
this.value = value;
}
@Override
public K getKey() { return key; }
@Override
public V getValue() { return value; }
}
泛型方法
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());
}
}
// 使用
OrderedPair<String, Integer> p1 = new OrderedPair<>("even", 8);
OrderedPair<String, Integer> p2 = new OrderedPair<>("odd", 8);
boolean same = Util.compare(p1, p2);
泛型通配符
public void printCollection(Collection<?> c) {
for (Object e : c) {
System.out.println(e);
}
}
// 限定通配符
public void printNumbers(Collection<? extends Number> c) {
for (Number n : c) {
System.out.println(n);
}
}
泛型是Java中一个非常强大的特性,它极大地提高了代码的类型安全性和可重用性。掌握泛型的使用对于编写高质量的Java代码至关重要
标签:Java,--,代码,类型,泛型,OrderedPair,public From: https://www.cnblogs.com/yangcurry/p/18383915