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); } }
看完记得三连哦!
下一篇:
Java标识符规则与规范