使用一般用于接收参数
void doSomething(Stats> ob) 表示这个参数ob可以是任意的Stats类型。
其中?表示一个不确定的类型,它的值会在调用时确定下来。
List> list = new ArrayList();注意不能写成List
- public class Test{
- public void pp(List> list){
- list.add("123"); //语法报错
- }
- public static void main(String[] args){
- List
list=new ArrayList<>(); - list.add("bbbb");
- Test t=new Test();
- t.pp(list);
- }
- }
这里的List>中的?表示可以传人任意的类型参数,其中List> list可以匹配任意参数化的类型,
但是到底匹配的是什么类型,只有以后才知道,所以cols=new ArrayList
- public static void printCollection(Collection> collection){
- for(Object obj:collection)
- System.out.println(obj);
- //collection.add("abc");//报错,因为collection不知道未来匹配的一定是String类型
- collection.size();//不报错,此方法与参数类型没有关系
- collection=new HashSet
();//这是可以的 - }
- public class A
{ - private ID id;
- private T name;
- }
定义泛型接口
- public interface IA
{ - public T pp();
- }
定义泛型类上给泛型添加约束
public class MyClassextends IA>{}
在泛型类或者泛型接口中不允许直接使用super
在这里, Integer 可以认为是 Integer 的 "父类"
List super Integer> array = new ArrayList();
Number 是 Integer 的 父类
List super Integer> array = new ArrayList();
Object 是 Integer 的 父类
List super Integer> array = new ArrayList
如果要求泛型实现两个或者两个以上的接口
public class MyClass1 & 接口2>{}
要求传入的类型T必须同时实现了接口1和接口2
如果要求泛型必须继承B类,同时实现IC接口
public class MyClassextends B & IC >{}
如果要求泛型继承一个类并且实现接口
public class MyClass{}