结论先行
1.静态方法中不能使用类的泛型
2.异常类不能声明为泛型类
3.泛型可以简写 ArrayList
list=new ArrayList<>();
集合中使用的泛型 ArrayList
//不能使用int,<>里不可以是基本数据类型 ArrayListlist=new ArrayList (); list.add(78); list.add(87); list.add(99); list.add(65); //list.add("Tom");编译时会报错 Iterator iterator=list.iterator; while(iterator.hasNext()){ int stuScore=iterator.next(); System.out.println(stuScore); }
集合中使用的泛型 Map
Entry是内部接口,不像map暴露在外边(有点像内部类)
Mapmap=new HashMap (); map.put("Tom",87); map.put("Jerry",87); map.put("Jack",67); //map.put(123,"ABC");报错 Set > entry=map.entrySet()
泛型里有一句很容易忽略却很重要的点
如果实例化时,没有指明泛型的类型,默认类型为java.lang.Object类型
定义一个泛型类Order
public class Order{ String orderName; int orderId; T orderT;//类的内部结构可以使用类的泛型 }
泛型类不指定默认是Object类型
Order order=new Order(); order.setOrderT(123);//不报错 order.setOrderT("ABC");//不报错
实例化时指明泛型的类型
Orderorder1=new Order (); order1.setOrderT("AA:Hello");
在继承一个泛型类的时候:
1、子类SubOrder将不再是泛型类
//继承时指明泛型类型,那这个子类SubOrder将不再是泛型类 public class SubOrder extends Order{ } //******************************************** SubOrder sub=new SubOrder();// SubOrder可以看成一个普通类了 sub.setOrderT(123);//orderT只能放Integer类型
2、子类SubOrder仍然是泛型类
//子类SubOrder仍然是泛型类 public class SubOrderextends Order { } //******************************************** SubOrder sub=new SubOrder (); sub.setOrderT("order..");//orderT只能放String类型
在继承多个参数的泛型类的时候:
下图就晕了
泛型方法:
泛型方法所属的类或接口带不带泛型无所谓,即泛型参数和类的泛型参数没有任何关系。
public List
copyTfromArrayToList(E[] arr),这样写的话,java呢就会想是不是有个类的名字叫E呢,而不是去把E当做泛型处理,所以才要在public后面加上 ,表面E就是一个泛型。
public class Order{ String orderName; int orderId; T orderT;//类的内部结构可以使用类的泛型 //定义一个数组转list的泛型方法,至于是什么样的数组可没指定 public List copyTfromArrayToList(E[] arr){ ArrayList list=new ArrayList<>(); for(E e : arr){ list.add(e); } return list; } }
接下来看看泛型方法怎么使用吧
注意泛型方法的泛型参数(Integer)和类的泛型参数(String)没有任何关系
Orderorder=new Order<>(); Integer[] arr=new Integer[]{1,2,3,4}; //泛型方法在调用时,需要指明泛型参数的类型 List List=order.copyFromArrayToList(arr);
注意点:泛型方法可以是静态的
原因:泛型参数是在调用方法时确定,并非在实例化类时确定
public class Order{ String orderName; int orderId; T orderT;//类的内部结构可以使用类的泛型 //定义一个数组转list的泛型方法,至于是什么样的数组可没指定 public static List copyTfromArrayToList(E[] arr){ ArrayList list=new ArrayList<>(); for(E e : arr){ list.add(e); } return list; } }
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)