在 Java 中,**泛型(Generics)**用于让类、接口、方法在定义时不指定具体类型,而是在使用时再指定,从而提高代码的复用性和类型安全。
下面从常见写法到示例给你系统讲一下。
class 类名<T> {
T 变量;
}
public class Box<T> {
private T value;
public void set(T value) {
this.value = value;
}
public T get() {
return value;
}
}
Box<String> box = new Box<>();
box.set("Hello");
String s = box.get();
interface 接口名<T> {
T method();
}
public interface Converter<T> {
T convert(String s);
}
public class IntConverter implements Converter<Integer> {
public Integer convert(String s) {
return Integer.parseInt(s);
}
}
修饰符 <T> 返回类型 方法名(T 参数) {}
public class Util {
public static <T> T getFirst(T[] array) {
return array[0];
}
}
String[] strs = {"a", "b"};
String first = Util.getFirst(strs);
class Pair<K, V> {
private K key;
private V value;
}
使用:
Pair<String, Integer> pair = new Pair<>();
List<?> list;
List<? extends Number> list;
✅ 可以读,不能写(除 null)
List<? super Integer> list;
✅ 可以写 Integer,读出来是 Object
<T extends Number>
示例:
public <T extends Comparable<T>> T max(T a, T b) {
return a.compareTo(b) > 0 ? a : b;
}
List<Object> list = new List<String>(); // 错误
Java 泛型是不变的。
| 场景 | 写法 |
|---|---|
| 泛型类 | class A<T> |
| 泛型接口 | interface A<T> |
| 泛型方法 | <T> T method() |
| 多泛型 | <K, V> |
| 上界 | ? extends T |
| 下界 | ? super T |
如果你愿意,我可以:
你想看哪一个?
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。