Java的泛型(Generics)是Java语言的一项特性,它允许你在定义类、接口和方法时使用类型参数,从而使代码更加通用和类型安全。泛型的主要目的是提供编译时类型检查和避免类型转换的麻烦。
以下是一些关于Java泛型的基本概念和用法:
泛型类
你可以定义一个泛型类,其中类型参数用尖括号(<>)括起来。例如:
public class Box<T> {
private T content;
public void setContent(T content) {
this.content = content;
}
public T getContent() {
return content;
}
}
在这个例子中,Box
类使用了一个类型参数T
,你可以在创建Box
对象时指定具体的类型:
Box<String> stringBox = new Box<>();
stringBox.setContent("Hello");
String content = stringBox.getContent();
泛型方法
你也可以定义泛型方法,方法的类型参数在返回类型之前声明:
public class Util {
public static <T> void printArray(T[] array) {
for (T element : array) {
System.out.println(element);
}
}
}
CopyInsert
你可以这样调用泛型方法:
String[] strings = {"Hello", "World"};
Util.printArray(strings);
CopyInsert
泛型接口
泛型接口的定义和泛型类类似:
public interface Container<T> {
void add(T item);
T get(int index);
}
实现泛型接口时,可以选择指定类型参数:
public class StringContainer implements Container<String> {
private List<String> items = new ArrayList<>();
@Override
public void add(String item) {
items.add(item);
}
@Override
public String get(int index) {
return items.get(index);
}
}
通配符
Java泛型还支持通配符(Wildcards),用于表示未知类型。通配符有三种形式:
?
:无界通配符,表示任何类型。? extends T
:上界通配符,表示类型T
或T
的子类型。? super T
:下界通配符,表示类型T
或T
的父类型。
例如:
public void printList(List<?> list) {
for (Object item : list) {
System.out.println(item);
}
}
类型擦除
Java泛型在编译时会进行类型擦除(Type Erasure),这意味着在运行时泛型类型信息会被擦除,变成原始类型。例如,List<String>
在运行时会变成List
。
泛型的限制
- 不能实例化类型参数。
- 不能创建类型参数的数组。
- 不能使用基本类型作为类型参数。
希望这些信息能帮助你更好地理解Java泛型。如果你有具体的问题或需要进一步的示例代码,请告诉我。