share
泛型(Generics)是Java SE 5.0引入的新特性,它允许在类、接口和方法的定义中使用类型参数。其主要目的是提供编译时类型安全检查和消除手动类型转换的需要,从而使代码更易于阅读和写作。
泛型的主要使用场景:
1. **集合类**:在Java的集合类库中,泛型被广泛使用。例如,可以创建一个只能包含字符串的ArrayList对象:`ArrayList<String> list = new ArrayList<String>();`这样,编译器就会确保只有字符串被添加到list中,否则编译错误。
2. **自定义类或方法**:可以在自定义类或方法中使用泛型,以提高代码的可重用性。例如,可以定义一个泛型类Pair,它包含两个类型参数:`public class Pair<K,V>{ private K key; private V value; }`这样,Pair类可以用于任何类型的键值对。
3. **类型安全**:在使用集合类时,如果没有使用泛型,当我们取出元素时,需要进行类型转换。如果存储的元素类型与我们转换的类型不匹配,就会抛出ClassCastException。但是如果我们使用了泛型,就可以在编译时期进行类型检查。
例如,没有使用泛型的情况:
```java
ArrayList list = new ArrayList();
list.add("hello");
Integer i = (Integer)list.get(0); //运行时抛出ClassCastException
```
使用泛型的情况:
```java
ArrayList<String> list = new ArrayList<String>();
list.add("hello");
Integer i = list.get(0); //编译时期错误
```
4. **泛型方法**:不仅可以在类上使用泛型,还可以在方法上使用。例如,下面的例子中定义了一个泛型方法,该方法可以接受任何类型的参数,并返回相同的类型。
```java
public class Utility {
public static <T> T identity(T arg) {
return arg;
}
}
```
总的来说,泛型是Java中一个重要的特性,它提高了代码的可读性和安全性。
作者:学无止境
出处:https://www.cnblogs.com/xiaonq
生活不只是眼前的苟且,还有诗和远方。