泛型引起的陷阱

 1 package stu;
 2
 3 import java.util.ArrayList;
 4 import java.util.List;
 5
 6 public class TestList {
 7     public static void main(String[] args) {
 8         List list = new ArrayList();
 9
10         list.add("1");
11
12         list.add(2); // 类型不一致
13
14         list.add("3q");
15
16         for (int i = 0; i < list.size(); i++) {
17
18             System.out.println(list.get(i));
19
20         }
21
22         // 第一个循环输出无任何问题,第二个循环报出转型异常。换几话说,集合本身可以存储
23
24         // 不同类型元素的对象的,只不过自从 JDK1.5之后出现了泛型,才使我们很多人觉得集合 变量仅仅能存一种类型的对象元素。
25
26         // 泛型是为了在编译时更好的排除类型转换带来的繁琐检查。而在大多数应用中确实集合中就是同类型的元素。
27
28         // 而泛型配合上加强的新循环, 它会强制进行单一类型的转型操作。
29
30         List<String> listNew = list;
31
32         for (String strNew : listNew) {
33
34             System.out.println(strNew);
35
36         }
37     }
38 }

结果:

泛型引起的陷阱,布布扣,bubuko.com

时间: 2024-10-17 14:41:07

泛型引起的陷阱的相关文章

Java集合与泛型中的几个陷阱,你掉进了几个?

下面我总结了集合.泛型.数组转集合等一些常见的陷进,认真看完,相信你绝对有所收获. 1.List ,List<?> 与 List<Object> 有区别吗? 说实话,我敢保证很多人是不知道 List, List<?> 与 List<Object> 之间的区别的. 1.我们先来看看 List 与 List<Object> 很多可能觉得 List<Object>的用法与 List 是一样的,例如很多人认为 List<Object&g

C#理解泛型

C# 理解泛型 出处:http://www.ondotnet.com/pub/a/dotnet/2004/05/17/liberty.html 术语表 generics:泛型 type-safe:类型安全 collection: 集合 compiler:编译器 run time:程序运行时 object: 对象 .NET library:.Net类库 value type: 值类型 box: 装箱 unbox: 拆箱 implicity: 隐式 explicity: 显式 linked list

你可能不知道的陷阱, IEnumerable接口

IEnumerable枚举器接口的重要性,说一万句话都不过分.几乎所有集合都实现了这个接口,Linq的核心也依赖于这个万能的接口.C语言的for循环写得心烦,foreach就顺畅了很多. 我很喜欢这个接口,但在使用中也遇到不少的疑问,你是不是也有与我一样的困惑: (1) IEnumerable 与  IEnumerator到底有什么区别 (2) 枚举能否越界访问,越界访问是什么后果?为什么在枚举中不能改变集合的值? (3) Linq的具体实现到底是怎样的,比如Skip,它跳过了一些元素,那么这些

关于Arrays.asList 函数的一些 陷阱

博客分类: JAVA相关 居然也碰到这个陷阱的问题了,查了下书,终于解决,大概讲解如下, 代码如下: Java代码 public static void main(String[] args) { int[] data = {1,2,3,4,5}; List list = Arrays.asList(data); System.out.println("列表中的元素数量是:" + list.size()); } public static void main(String[] args

java中DelayQueue的一个使用陷阱分析

最近工作中有接触到DelayQueue,网上搜索资料的时候发现一篇文章谈到DelayQueue的坑.点击打开链接 文中已经总结了遇到坑的地方,还有解决方案.不过我第一眼看一下没弄明白为什么,所以翻了翻源码深究了一下,下面把这个坑的原因以及原理分析一下. 首先是DelayQueue的take()方法: 1 public E take() throws InterruptedException { 2 final ReentrantLock lock = this.lock; 3 lock.lock

集合一些方法陷阱

一:asList  数组转ArrayList陷阱: asList() 源码: public static <T> List<T> asList(T... a) { return new ArrayList<T>(a); } private final E[] a; ArrayList(E[] array) { if (array==null) throw new NullPointerException(); a = array; } 分析:需要注意以下几点: (1)总

C#规范整理&#183;泛型委托事件

基于泛型,我们得以将类型参数化,以便更大范围地进行代码复用.同时,它减少了泛型类及泛型方法中的转型,确保了类型安全.委托本身是一种引用类型,它保存的也是托管堆中对象的引用,只不过这个引用比较特殊,它是对方法的引用.事件本身也是委托,它是委托组,C#中提供了关键字event来对事件进行特别区分.   一旦我们开始编写稍微复杂的C#代码,就肯定离不开泛型.委托和事件. 1.总是优先考虑泛型 泛型的优点是多方面的,无论是泛型类还是泛型方法都同时具备可重用性.类型安全和高效率等特性,这都是非泛型类和非泛

.NET编程01(泛型)

一:Object 类型:一切类型的父类,通过继承,子类拥有父类一切属性和行为:任何父类出现的地方,都可以用子类来代替: 用一个方法来完成多个方法做的事 /// <summary>    /// 普通方法类    /// </summary>    public class CommonMethod    {        /// <summary>        /// 打印个int值        /// </summary>        /// <

c#系统泛型委托

Action<T> 无返回值的系统泛型委托 namespace ConsoleApp1 { public class UserInfo { public int Id { get; set; } public string Name { get; set; } public int Age { get; set; } } class Program { private static List<UserInfo> getInit() { return new List<User