java泛型----经典讲解
来源:互联网 发布:ug编程参数设置 编辑:程序博客网 时间:2024/05/09 10:50
1.泛型的基本概念
泛型是Java SE 1.5的新特性,泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数,这种参数类型可以用在类,接口和方法的创建中,分别被称为泛型类,泛型接口,泛型方法。
java语言引入泛型的好处就是安全简单。
在Java SE 1.5之前,在没有泛型的情况下,通过对类型Object的引用来时实现参数的”任意化“,这种”任意化“带来的缺点是要做显示的强制类型转换,而这种转换要求开发者对实际的参数类型可以预知的情况下进行的,对于强制类型转换错误的情况下,编译器压根就不提示错误,在运行的时候才会出现异常,这是一个安全隐患。
泛型的好处就是:在编译的时候检查类型安全,并且所有的强制转换都是自动和隐式的,提高代码的重用率。
下面进行举例说明:
ArrayList al=new ArrayList();
//创建一只狗
Dog dog1=new Dog();
//放入到集合中
al.add(dog1);
//取出,这个时候需要强制类型转换
Dog temp=(Dog) al.get(0);
//下面这种情况就是,在某些不知情的程序猿,以为al中放的是猫,这时候编译不报错
Cat temp_cat=(Cat)al.get(0);
这个时候如果运行程序会报类型转换异常,如下:
Exception in thread "main" java.lang.ClassCastException: com.test.Dog cannot be cast to com.test.Cat
at com.test.test.main(test.java:16)
Java Result: 1
就是说狗类对象不能转化为猫类对象。这个是在运行的时候才能知道的,在编译阶段,程序并不知道,你al里面放的是猫还是狗,所以,这就是我们前面所说的安全隐患。那怎么办呐?这时候我们就引入了泛型。
将上面的代码改变如下:
<span style="font-size:18px;">ArrayList<Dog> al=new ArrayList<Dog>(); //创建一只狗 Dog dog1=new Dog(); //放入到集合中 al.add(dog1); //取出,这个时候不需要强制类型转换,泛型就自动转换了,将object类型的转换为Dog类型的 Dog temp=al.get(0); //现在下面这种情况就是,在某些不知情的程序猿,以为al中放的是猫,这时候编译报错 Cat temp_cat=(Cat)al.get(0);//错误</span>这时候,编译器在编译的时候,语句
<span style="font-size:18px;"> Cat temp_cat=(Cat)al.get(0);</span>会被报错,编译器提示:不兼容的类型: Dog无法转换为Cat
2.什么时候用泛型呢?
如果你用的一个类,但是不知道这个类的类型究竟是什么,用的这个类型经常变化,可能是string interger 等等,那你总不能写很多个类吧,这样子代码的重用率很低,所以泛型主要有两个好处,一个是安全,一个是代码的从用率。只有用了泛型才知道它的好处。
当然还有其他的一些好处;
1>类型安全
2>向后兼容
3>层次清晰
4>性能较高,用泛型的java代码可以为java编译器和虚拟机带来更多的类型信息,这些信息对java程序做进一步优化提供条件。
- java泛型----经典讲解
- java抽象类和接口经典讲解
- Java Killer系列之Java经典面试套路讲解
- Java经典面试套路讲解:Java Killer系列
- Java Killer系列之Java经典面试套路讲解
- Java 多线程同步问题的探究-经典讲解
- Java经典类库-Guava中的函数式编程讲解
- Java经典类库-Guava中的函数式编程讲解
- Java经典类库-Guava中的函数式编程讲解
- java回忆录—输入输出流详细讲解(入门经典)
- java回忆录—输入输出流详细讲解(入门经典)
- Java堆、栈和常量池以及相关String的详细讲解(经典中的经典)
- Java堆、栈和常量池以及相关String的详细讲解(经典中的经典)
- Java堆、栈和常量池以及相关String的详细讲解(经典中的经典)
- Java堆、栈和常量池以及相关String的详细讲解(经典中的经典)
- Java堆、栈和常量池以及相关String的详细讲解(经典中的经典)
- Java堆、栈和常量池以及相关String的详细讲解(经典中的经典)
- Java堆、栈和常量池以及相关String的详细讲解(经典中的经典)
- BP神经网络非线性函数拟合应用
- SAT数学考试常用词汇大全 中英文对照(二)
- 【iOS】网页中调用JS与JS注入
- 横向滑动的listview效果的实现方法,scrollview嵌套水平滑动的listview卡顿的解决方法
- 怎么看app 是webapp还是原生app
- java泛型----经典讲解
- 谈谈对程序员的培养
- 使用ant编译java项目的简单实例
- SIMCOM推出超高速WCDMA 3G模块SIM5360
- lua关于require和package.loaded 之间的关系
- iOS 枚举类型
- 我们90%的工程师都用你写的软件,但抱歉我们不能聘用你
- 丑数
- Oracle 自动计算合理的数学表达式