-
首先演示一下不适用泛型的情况下可能会出现的问题
public class Demo1 { public static void main(String[] args) { ArrayList list = new ArrayList(); list.add(48); list.add(68); list.add(51); list.add(24); list.add(10); //问题一: 可能会出现类型不安全的问题 list.add("shsug"); for (Object obj : list){ //问题二: 涉及到强制类型转换,可能会出现ClassCastExcation int StrScore = (Integer)obj; System.out.println(StrScore); } } }
这里涉及到两个可能会出现问题的地方.一是在添加元素时,由于没有约束限制,可以向其中添加任意元素,导致出现类型不安全的问题;二是在进行元素的遍历 *** 作时,由于涉及到元素的强制类型转换,可能会出现ClassCastExcation异常, 因此我们就要使用一种能约束输入元素类型的方式来处理这个问题,这就用到了泛型
-
接下来演示使用泛型的情形
import java.util.ArrayList; import java.util.Iterator; public class Demo2 { public static void main(String[] args) { ArrayList
list = new ArrayList<>(); list.add(78); list.add(58); list.add(8); list.add(188); list.add(12); //此时无法添加String类型的数据 // list.add("fsf"); //①使用增强for循环 for (Integer score : list){ int Strscore = score; System.out.println(Strscore); } //②使用迭代器 Iterator iterator = list.iterator(); while (iterator.hasNext()){ int StrScore = iterator.next(); System.out.println(StrScore); } } }
在上述代码中我们使用了两种遍历方式对使用了泛型方法的集合进行了遍历.因为使用了泛型,所以实例化时,添加的元素只能是指定类型的数据,无法添加其他类型的元素
2.接下来我们思考一下为什么在使用迭代器遍历元素时,就能保证iterator.next()的数据为Integer类型?-
因为Iterator接口声明中就定义了泛型
,因此,当我们在声明一个指定类型的对象后,terator接口接口中就只能是我们声明的数据类型,这样就保证了iterator.next()的数据为Integer类型
注:
-
①泛型的类型必须是类,不能是基本数据类型.如果需要使用基本数据类型的地方就用包装类替换
-
②如果在声明时未指明泛型的类型,则默认为Object类型的
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)