黑马程序员——泛型、泛型限定
2014-03-08 03:11
197 查看
----------------------
ASP.Net+Unity开发、.Net培训、期待与您交流! ----------------------
一、为什么要有泛型
泛型其实就是用来限制传入的数据类型的,他可以在类中、方法中限定传入数据的类型。在没有泛型之前,常用Object obj来表示操作中的数据类型不确定,但是使用中必然需要强转为需要的数据类型,比较麻烦。(重点是泛型限定)
二、泛型的作用
1、泛型将运行时期的问题ClassCastException转移到了编译时期,使得我们可以在编译时期就能够对程序进行调整、规范,同时也避免了强转的麻烦
2、泛型限制了传入数据类型,于是就有了泛型限定的概念。利用泛型限定,抽取出对象的共有方法,既可以限制其他数据类型的传入,又能够优化代码,完成功能。
三、泛型的基本类型
①泛型类
③泛型静态函数
四、泛型实用的注意事项
1、泛型到底代表什么类型取决于调用者传入的类型,也就是说:如果调用者是一个子类类型,且它的泛型限定是<? super E>,那么它就可以调用它和它的父类类型的泛型限定函数。如果没传,默认是Object类型。
2、使用带泛型的类创建对象时,等式两边的泛型必须相同。因为运行的时候需要对象的具体类型。
3、如果等式两边一边有泛型,一边没有,可以兼容。但是分两种情况:
泛型在左边:编译时检查增加的元素是否与变量类型相符,否则编译失败
泛型在右边:相当于泛型不存在
在使用泛型限定中,可以很好的对我们的代码进行优化。使用时,首先我们的代码必须有共性的部分,被我们抽取成泛型。如果我们调用的对象是一个子类,这时我们要考虑子类的方法,如果它的方法参数中有<? super E>我们就可以考虑,调用抽取出去的父类泛型限定的共性。同理,如果我们拥有animal的集合,它拥有子集两只脚的、四只脚的、更多脚的。。。。当我们想向animal集合中添加元素时,这个集合的类型就是animal,而添加的元素属于它的子集,那么添加元素的方法必须是这样的<?
extends animal>。
----------------------
ASP.Net+Unity开发、.Net培训、期待与您交流! ----------------------
ASP.Net+Unity开发、.Net培训、期待与您交流! ----------------------
一、为什么要有泛型
泛型其实就是用来限制传入的数据类型的,他可以在类中、方法中限定传入数据的类型。在没有泛型之前,常用Object obj来表示操作中的数据类型不确定,但是使用中必然需要强转为需要的数据类型,比较麻烦。(重点是泛型限定)
二、泛型的作用
1、泛型将运行时期的问题ClassCastException转移到了编译时期,使得我们可以在编译时期就能够对程序进行调整、规范,同时也避免了强转的麻烦
2、泛型限制了传入数据类型,于是就有了泛型限定的概念。利用泛型限定,抽取出对象的共有方法,既可以限制其他数据类型的传入,又能够优化代码,完成功能。
三、泛型的基本类型
①泛型类
class A<Q>
{ private Q obj; public void setObject(Q obj)
{ this.obj = obj; } public Q getObject()
{ return obj; } }②泛型方法
public <W> void print(W w)
{ System.out.println("print:"+w); }
③泛型静态函数
public static <Q> void function(Q t)
{ System.out.println("function:"+t); }④泛型接口
interface Inter<T>
{ void show(T t); } class InterImpl<R> implements Inter<R>
{ public void show(R r)
{ System.out.println("show:"+r); } }
四、泛型实用的注意事项
1、泛型到底代表什么类型取决于调用者传入的类型,也就是说:如果调用者是一个子类类型,且它的泛型限定是<? super E>,那么它就可以调用它和它的父类类型的泛型限定函数。如果没传,默认是Object类型。
2、使用带泛型的类创建对象时,等式两边的泛型必须相同。因为运行的时候需要对象的具体类型。
3、如果等式两边一边有泛型,一边没有,可以兼容。但是分两种情况:
泛型在左边:编译时检查增加的元素是否与变量类型相符,否则编译失败
import java.util.*; class Test { public static void main(String[] args) { ArrayList<Integer> al=new ArrayList(); al.add(1); al.add(2); al.add("asd"); System.out.println(al);//编译失败 } }
泛型在右边:相当于泛型不存在
import java.util.*; class Test { public static void main(String[] args) { ArrayList al=new ArrayList<Integer>(); al.add(1); al.add(2); al.add("asd"); System.out.println(al);//打印结果为[1, 2, asd] } }五、泛型限定的使用
在使用泛型限定中,可以很好的对我们的代码进行优化。使用时,首先我们的代码必须有共性的部分,被我们抽取成泛型。如果我们调用的对象是一个子类,这时我们要考虑子类的方法,如果它的方法参数中有<? super E>我们就可以考虑,调用抽取出去的父类泛型限定的共性。同理,如果我们拥有animal的集合,它拥有子集两只脚的、四只脚的、更多脚的。。。。当我们想向animal集合中添加元素时,这个集合的类型就是animal,而添加的元素属于它的子集,那么添加元素的方法必须是这样的<?
extends animal>。
----------------------
ASP.Net+Unity开发、.Net培训、期待与您交流! ----------------------
相关文章推荐
- 黑马程序员--Java基础加强--02.代码简化 书写规律I_原始数据类型【重载】【多态】【泛型】【泛型限定】【个人总结】
- 黑马程序员——集合框架(泛型限定)
- 黑马程序员--08.泛型--02.【泛型方法】【泛型接口】【泛型限定的基本使用】【个人总结】
- 黑马程序员--Java基础加强--06.【泛型通配符限定】【个人总结】
- 黑马程序员_日记52_泛型限定初级使用
- 黑马程序员_java对泛型的限定: <? extends E > , < ? super E > 的理解和体会。
- (黑马程序员)泛型限定原理和使用(一)
- 黑马程序员——泛型限定
- (黑马程序员)泛型的限定原理和使用(二)
- 黑马程序员------集合框架(No.4)(泛型、泛型类、泛型方法、泛型接口、泛型限定)
- 黑马程序员_日记55_TreeSet、泛型限定和比较器限定方式的综合运用方式
- 黑马程序员--Java基础加强--03.代码简化 书写规律II_参数化数据类型【重载】【多态】【泛型】【泛型限定】【个人总结】
- 黑马程序员--集合框架---泛型限定
- 黑马程序员_day15 TreeSet,二叉树,实现Comparator方式排序,泛型,泛型接口,泛型限定)
- 黑马程序员——泛型限定,上限,下限
- java集合框架(泛型限定)
- 黑马程序员_Java高新技术_泛型
- 黑马程序员_毕向东JAVA基础_集合(2)Collection&&List&&Set&&泛型
- 黑马程序员:泛型
- 黑马程序员---转载关于java泛型的详细介绍