Java泛型是Java 5中引入的一项重要特性,用于增强代码的类型安全性和可读性。泛型可以让我们编写更加通用、灵活的代码,并且可以在编译时检查类型正确性,避免运行时出现类型转换异常等问题。
定义方式:
Java泛型通过在类型、方法或类的声明中使用尖括号<>来声明泛型参数。例如:
public class MyClass<T> {
//...
}
public <T> void myMethod(T t) {
//...
}
List<String> myList = new ArrayList<String>();
在上面的示例中,MyClass
、myMethod
和List
都使用了泛型参数。其中,MyClass
是一个泛型类,<T>
表示声明了一个类型变量T
,可以在类的内部使用这个变量。myMethod
是一个泛型方法,同样使用了类型变量T
,方法签名中的<T>
表示该方法是一个泛型方法。List
是Java集合框架中的一个接口,通过指定<String>
类型参数来创建了一个只能存储字符串元素的列表。
使用方式:
使用泛型时,需要注意以下几点:
- 泛型参数只能是引用类型,不能是基本类型。
- 泛型参数在声明时不必指定其具体类型,而是在使用时再指定。
- 泛型参数可以有多个,用逗号隔开。
- 泛型参数的命名可以自定义,通常使用单个大写字母。
- 泛型通配符:表示不确定的类型,使用?表示,例如
List<?> list = new ArrayList<>()
表示一个未知元素类型的List。
以下是一些泛型的使用示例:
// 声明一个泛型类
public class Box<T> {
private T t;
public void set(T t) {
this.t = t;
}
public T get() {
return t;
}
}
// 使用泛型类创建对象
Box<Integer> intBox = new Box<Integer>();
intBox.set(10);
int value = intBox.get();
// 声明一个泛型方法
public <T> void swap(List<T> list, int i, int j) {
T temp = list.get(i);
list.set(i, list.get(j));
list.set(j, temp);
}
// 使用泛型方法
List<String> stringList = new ArrayList<>();
stringList.add("hello");
stringList.add("world");
swap(stringList, 0, 1);
// 声明一个泛型接口
public interface Pair<K, V> {
K getKey();
V getValue();
}
// 使用泛型接口实现类
public class StringPair implements Pair<String, String> {
private String key;
private String value;
public StringPair(String key, String value) {
this.key = key;
this.value = value;
}
public String getKey() {
return key;
}
public String getValue() {
return value;
}
}