Java - 泛型
其他关于泛型的博客:链接
一、泛型语法和使用
1. 泛型使用的注意事项和细节


二、自定义泛型
1. 自定义泛型类
2. 自定义泛型接口

- 注:接口中的成员是静态的。
## 3. 自定义泛型方法 
示例: ```java package GenricExcise_;
public class excise02 {
public static void main(String[] args) {
Apple<String,Integer,Double> apple = new Apple<>();
apple.fly(10);//10 会被自动装箱 Integer10
apple.fly(new Dog());
}
}
class Apple<T,B,M> {
public
System.out.println(e.getClass().getSimpleName());
}
//public void eat(U u){} //错误,因为U没有声明
public void run(M m){}
}
class Dog{}
代码运行结果:<br />
<a name="EVQCe"></a>
## 4. 泛型的继承和通配符
<a name="NEQ5X"></a>
### (1)泛型的继承和通配符说明

示例:
```java
package GenricExcise_;
import java.util.ArrayList;
import java.util.List;
public class CustomGeneric {
public static void main(String[] args) {
List<Object> list1 = new ArrayList<>();
List<String> list2 = new ArrayList<>();
List<AA> list3 = new ArrayList<>();
List<BB> list4 = new ArrayList<>();
List<CC> list5 = new ArrayList<>();
//如果是 List<?> c,可以接受任意的泛型类型
printCollection(list1);
printCollection(list2);
printCollection(list3);
printCollection(list4);
printCollection(list5);
//printCollection2(list1); Object不是AA的子类
//printCollection2(list2); String不是AA的子类
printCollection2(list3);
printCollection2(list4);
printCollection2(list5);
printCollection3(list1);
//printCollection3(list2); String不是AA的父类
printCollection3(list3);
//printCollection3(list4); BB不是AA的父类
//printCollection3(list5); CC不是AA的父类
}
//说明:List<?> 表示 任意的泛型类型都可以接受
public static void printCollection(List<?> c) {
for (Object o : c) { //通配符,取出时,就是 Object
System.out.println(o);
}
}
// ? extends AA 表示 上限,可以接受 AA 或者 AA子类
public static void printCollection2(List<? extends AA> c) {
for (Object o : c) {
System.out.println(o);
}
}
// ? super 子类类名AA 表示支持AA类以及AA类的父类,不限于直接父类
public static void printCollection3(List<? super AA> c) {
for (Object o : c) {
System.out.println(o);
}
}
}
class AA{}
class BB extends AA{}
class CC extends AA{}
三、JUnit 单元测试类


设置完成后,可以看到函数可以直接运行,下面为结果:




浙公网安备 33010602011771号