Java中泛型的理解及如何使用——精简

💕💕 经过我反复的修改,这篇文章终于可以发布啦!🎶🎶 在看之前先来😍😍😍

正文开始

为什么要使用泛型🤔

需求:存放学生的成绩

//在集合中使用泛型之前的情况:
    @Test!
    public void test(){
        ArrayList list = new ArrayList();
        list.add(99);
        list.add(98);
        list.add(97); 
        }

存在问题: 问题一:类型不安全

list.add("Tom");

问题二:强转时,可能出现ClassCastException

for(Object score : list){
            int stuScore = (Integer) score;
            System.out.println(stuScore);
  }

在集合中使用泛型的情况:以ArrayList为例

@Test
    public void test1(){
       ArrayList<Integer> list =  new ArrayList<Integer>();
        list.add(78);
        list.add(87);
        list.add(99);
        list.add(65);
//        list.add("Tom");
//编译时,就会进行类型检查,保证数据的安全
        for(Integer score : list){        //避免了强转操作
            int stuScore = score;

            System.out.println(stuScore);
        }     
    }

总结✌️

泛型的使用 jdk 5.0新增的特性 在集合中使用泛型: 总结: ① 集合接口或集合类在jdk5.0时都修改为带泛型的结构。 ② 在实例化集合类时,可以指明具体的泛型类型 ③ 指明完以后,在集合类或接口中凡是定义类或接口时,内部结构(比如:方法、构造器、属性等)使用到类的泛型的位置,都指定为实例化的泛型类型。 比如:add(E e) —>实例化以后:add(Integer e) 注意点:泛型的类型必须是类,不能是基本数据类型。需要用到基本数据类型的位置,拿包装类替换 如果实例化时,没有指明泛型的类型。默认类型为java.lang.Object类型。

自定义泛型结构

泛型类、泛型接口;泛型方法。 如果定义了泛型类,实例化没有指明类的泛型,则认为此泛型类型为Object类型 要求:如果大家定义了类是带泛型的,建议在实例化时要指明类的泛型。

泛型类Order

public class Order<T> {
    String orderName;
    int orderId;
    //类的内部结构就可以使用类的泛型
    T orderT;
    public Order(){
        T[] arr = (T[]) new Object[10];
    }
    public Order(String orderName,int orderId,T orderT){
        this.orderName = orderName;
        this.orderId = orderId;
        this.orderT = orderT;
    }
    public T getOrderT(){
        return orderT;
    }
    public void setOrderT(T orderT){
        this.orderT = orderT;
    }
    @Override
    public String toString() {
        return "Order{" +
                "orderName=" + orderName +  +
                ", orderId=" + orderId +
                ", orderT=" + orderT +
                };
    }
    }
    //泛型方法
    public static <E>  List<E> copyFromArrayToList(E[] arr){
        ArrayList<E> list = new ArrayList<>();
        for(E e : arr){
            list.add(e);
        }
        return list;
    }
}

测试类

public class GenericTest1 {
    @Test
    public void test1(){  
        Order order = new Order();
        order.setOrderT(123);
        order.setOrderT("ABC");
        Order<String> order1 = new Order<String>("orderAA",1001,"order:AA");
        order1.setOrderT("AA:hello");
    }
    @Test
    public void test2(){
        ArrayList<String> list1 = null;
        ArrayList<Integer> list2 = new ArrayList<Integer>();
     Person p1 = null;
        Person p2 = null;
        p1 = p2;
    }
    //测试泛型方法
    @Test
    public void test4(){
        Order<String> order = new Order<>();
        Integer[] arr = new Integer[]{1,2,3,4};
        //泛型方法在调用时,指明泛型参数的类型。
        List<Integer> list = order.copyFromArrayToList(arr);
        System.out.println(list);
    }
}

看完记得三连哦!

经验分享 程序员 微信小程序 职场和发展