💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
#### 泛型特性 * 声明泛型方法时,类型参数要放在修饰符\(例如public和static\)之后,返回类型之前; * 泛型类型参数不能用基本类型实例化 ``` Entry<String, int> entry; //error ``` * 泛型类型参数可以有多个限定:T extends Runnalbe & AutoCloseable * 泛型不能被实例化,包括泛型数组 * 泛型类型参数可以有多个接口限定,但最多只能有一个类;如果有一个限定是类,那么它必须放在限定列表第一位 * JAVA可以使用通配符限制方法的参数类型和返回类型应该如何变化,这种机制有时被称作使用时变化 * 子类型通配符和父类型通配符 ``` <? extends Runnable>表示任意Runnable的子类型; <? super Employee>表示Employee的一个父类型; ``` * 创建泛型数组 ``` // 方式一 public static <T> T[] get(Class<T> type, int size) { return (T[]) Array.newInstance(type, size); } // 方式二(先声明通配类型数组再强制转换) Pair<String>[] pairs = (Pair<String>[]) new Pair<?>[10]; ``` * 钻石语法![](../assets/20180414223712001.png) #### JAVA泛型转换 * 虚拟机中没有泛型,只有普通类和方法; * 所有的类型参数都用他们的限定类型替换; * 桥方法被合成来保持多态; * 为保持类型安全性,必要时插入强制类型转换;