标签:出现 变量 形式 问题: cas ict erro void lis
为什么要使用泛型?
引入例子
public class GenericTest { public static void main(String[] args) { List list = new ArrayList(); list.add("qqyumidi"); list.add("corn"); list.add(100); for (int i = 0; i < list.size(); i++) { String name = (String) list.get(i); // 1 System.out.println("name:" + name); } } }
上述代码在编译器没有问题,但在运行期间,将会报错。因为List的add方法的参数为object,如果不知道List类型时,通过强转获值,这时就会报错了。因为编译阶段正常,而运行时会出现“java.lang.ClassCastException”异常。因此,导致此类错误编码过程中不易发现。
在如上的编码过程中,我们发现主要存在两个问题:
1.将对象放入集合的时候,集合不会记住对象的类型,当再次从集合中取出此对象时,改对象的编译类型变成了Object类型,但运行时的类型仍然是其本身类型。
2.因此,//1处取出集合元素时要人为的强制转化到具体的目标类型,且很容易出现java.lang.ClassCastException异常
(这个例子,是我在一篇博客里找的我能读懂的引入泛型的例子,可是我执行的时候报错了,错的内容是java:4: error: cannot find symbol,可能是我的jdk版本不对,我想把关于泛型的例子尽快整理完,这个错就暂时先放这里了。知道具体错的朋友,请在评论区给我留言,谢谢。)
怎么样才能让集合记住集合内部元素各个类型,且能够达到只要编译时不出现问题,运行时就不出现java.lang.ClassCastException异常呢?答案就是使用泛型。
什么是泛型?
泛型,即“参数化类型”。一提到参数,最熟悉的就是定义方法时有形参,然后调用此方法时传递实参。那么也将类型由原来的具体的类型参数化,类似于方法中的变量参数,类型也定义成参数形式(称之为类型形参),然后在使用时传入具体的类型(类型实参)
public class GenericTest { public static void main(String[] args) { List<String> list = new ArrayList<String>(); list.add("qqyumidi"); list.add("corn"); //list.add(100); // 1 提示编译错误 for (int i = 0; i < list.size(); i++) { String name = list.get(i); // 2 System.out.println("name:" + name); } } }
标签:出现 变量 形式 问题: cas ict erro void lis
原文地址:https://www.cnblogs.com/baxianhua/p/9194369.html