标签:get 形参 getc ext 使用 src 类型 bsp java
为什么要使用泛型
首先我们先来看一段演示代码,如下所示,
1 public static void main(String[] args) { 2 List list = new ArrayList(); 3 list.add("abc"); 4 list.add(123); 5 list.add(HashMap.class); 6 7 System.out.println(list.get(0)); 8 }
第2行,List里面的内容类型是Object类型,因此第3、4、5行可以接受String、Integer或者Class类型。然鹅,会存在两个严重的问题:
①在List集合中,增加元素时,集合不会记住元素的具体类型,对象的编译类型为Object类型,但是运行时类型仍然是本身的类型,如String等。
②在List集合中,取出元素时,需要对Object类型,进行转换,因为没有存储元素的真实类型,所以很容易出现ClassCastException异常。
因此我们的需求需要满足,第一编译能够识别元素的类型,第二不能出现类型强转出现的异常。于是泛型就出现了。于是出现了开发者很熟悉的一段代码:
在编译期间确定类型,只要不满足这个类型,则编译不通过。总结一下使用泛型带来的好处
1.类型确定,使得如果出现类型不一致在编译期间不同通过,而不是在运行期间抛出异常。
2.编码在逻辑代码中出现过多的强转,代码优雅性较好。
我们再来看一段如下代码,
1 public static void main(String[] args) { 2 List<String> a = new ArrayList(); 3 List<Integer> b = new ArrayList<>(); 4 5 Class<? extends List> aClass = a.getClass(); 6 Class<? extends List> bClass = b.getClass(); 7 8 System.out.println(aClass +" && "+ bClass); 9 System.out.println(aClass == bClass); 10 }
打印出来的结果是 class java.util.ArrayList && class java.util.ArrayList true。因此,泛型的类型不会对集合实例时什么类型造成影响。如上图所示的泛型类型分别为String和Integer,但是getClass类型确是相同,都为ArrayList。因此想要定义两个重载函数,如果使用形参列表来区分重载,仅仅通过泛型不同时不可行的,演示代码如下所示,编译期间不通过。
标签:get 形参 getc ext 使用 src 类型 bsp java
原文地址:https://www.cnblogs.com/sunshine798798/p/9749964.html