publicclassGenericTest{// 在集合中使用泛型之前的情况// 问题1:类型不安全// 问题2:强转时,可能出现ClassCastException@Testpublicvoidtest1(){
ArrayList<Integer> list =newArrayList<>();
list.add(78);
list.add(22);
list.add(11);
list.add(55);// list.add("Tom");//加上泛型以后规范装入的数据// The method add(Integer) in the type ArrayList<Integer> is not applicable for// the arguments (String)// for (Integer score : list) {// int stuScore = (Integer)score;// System.out.println(stuScore);// }
Iterator<Integer> iterator = list.iterator();while(iterator.hasNext()){
System.out.println(iterator.next());}}
2.自定义泛型
@Testpublicvoidtest2(){// 如果自定义了泛型类,实例化没有指明类的泛型,则认为此泛型类型为Object类型// 要求:如果实例化的类带有泛型,那么实例化时应指出泛型
Order o =newOrder();
o.setOrderT(444);
o.setOrderT("123");
System.out.println(o.getOrderT());// 实例化时指明泛型的类型
Order<String> o1 =newOrder<>();
o1.setOrderT("123");
System.out.println(o1.getOrderT());// 自定义类的父类已经定义泛型,则子类不需要定义泛型,使用父类的泛型
SubOrder s =newSubOrder();
SubOrder1<String> s2 =newSubOrder1<>();}
/*
* 自定义泛型
*/publicclassOrder<T>{
String orderName;int orderId;//类的内部结构就可以使用类的泛型
T orderT;publicOrder(){}publicOrder(String orderName,int orderId, T orderT){super();this.orderName = orderName;this.orderId = orderId;this.orderT = orderT;}public String getOrderName(){return orderName;}publicvoidsetOrderName(String orderName){this.orderName = orderName;}publicintgetOrderId(){return orderId;}publicvoidsetOrderId(int orderId){this.orderId = orderId;}public T getOrderT(){return orderT;}publicvoidsetOrderT(T orderT){this.orderT = orderT;}//自定义泛型方法:在方法中出现了泛型的结构,泛型的参数与类的泛型参数没有任何关系//泛型方法所属的类是不是泛型类都没有关系public<E> List<E>copyArrayToList(E[] arr){
ArrayList<E> list =newArrayList<>();for(E e : arr){
list.add(e);}return list;}}
3.泛型方法
泛型方法
泛型方法可以声明为static静态的
@Testpublicvoidtest3(){
Order<String> o =newOrder<>();
Integer[] arr =newInteger[]{1,2,3,4};
List<Integer> list = o.copyArrayToList(arr);for(Object object : list){
System.out.println(object);}}//自定义泛型方法:在方法中出现了泛型的结构,泛型的参数与类的泛型参数没有任何关系//泛型方法所属的类是不是泛型类都没有关系public<E> List<E>copyArrayToList(E[] arr){
ArrayList<E> list =newArrayList<>();for(E e : arr){
list.add(e);}return list;}