博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
黑马程序员-6 泛型
阅读量:5011 次
发布时间:2019-06-12

本文共 2366 字,大约阅读时间需要 7 分钟。

------- android培训、java培训、期待与您交流! ----------

 

泛型是Java SE 1.5的新特性,泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。这种参数类型可以用在类、接口和方法的创建中,分别称为泛型类、泛型接口、泛型方法。 Java语言引入泛型的好处是安全简单。

在泛型出现前,让类直接持有Object类型的对象来实现泛用。

泛型基本是现在编译器层次上。

class Point
{ // 此处可以随便写标识符号,T是type的简称 private T var ; // var的类型由T指定,即:由外部指定 public T getVar(){ // 返回值的类型由外部决定 return var ; } public void setVar(T var){ // 设置的类型也由外部决定 this.var = var ; } }; public class GenericsDemo06{ public static void main(String args[]){ Point
p = new Point
() ; // 里面的var类型为String类型 p.setVar("it") ; // 设置字符串 System.out.println(p.getVar().length()) ; // 取得字符串的长度 } };

 

 

泛型方法:

尽可能使用泛型方法:如果使用泛型方法可以取代将整个类泛型化,那么就应该只使用泛型方法。
static方法无法访问泛型类的类型参数,所以如果static需要使用泛型,必须使其成为泛型方法。

class Demo{      public 
T fun(T t){ // 可以接收任意类型的数据 return t ; // 直接把参数返回 } }; public class GenericsDemo26{ public static void main(String args[]){ Demo d = new Demo() ; // 实例化Demo对象 String str = d.fun("汤姆") ; // 传递字符串 int i = d.fun(30) ; // 传递数字,自动装箱 System.out.println(str) ; // 输出内容 System.out.println(i) ; // 输出内容 } };

 

泛型的通配符:? 未知类型

可以对类型进行限定 ? extends E:接收E类型或者子类型对象,上限
? super E:接收E类型或者E的福类型,下限
一般来说,在存储元素的时候使用上限,因为这样都是按照上限类型来运算的,不会出现类型安全隐患。

class MyCollection
{ public void add(E e){ } public void addAll(MyCollection
al){ } }

 

什么时候使用下限?通常对集合中的元素进行取出操作时,可以使用下限。

class TreeSet
{ Tree(Comparator
comp);}

 

====================================================

泛型无法向上转型

class Info
{ private T var ; // 定义泛型变量 public void setVar(T var){ this.var = var ; } public T getVar(){ return this.var ; } public String toString(){ // 直接打印 return this.var.toString() ; } }; public class GenericsDemo23{ public static void main(String args[]){ Info
i1 = new Info
() ; // 泛型类型为String Info
i2 = null ; i2 = i1 ; //这句会出错 incompatible types } };

 

转载于:https://www.cnblogs.com/grjelf/archive/2012/10/20/2732110.html

你可能感兴趣的文章
【剑指offer】面试题26:复杂链表的复制
查看>>
spark开发生成EXE
查看>>
Vue 全家桶介绍
查看>>
WPF Bitmap转Imagesource
查看>>
Java compiler level does not match the version of the installed Java project facet.解决方法
查看>>
笔记_小结
查看>>
Linux lsof命令 umount U盘
查看>>
自定义Font
查看>>
linux svn 服务端搭建
查看>>
maven用途、核心概念、用法、常用参数和命令、扩展
查看>>
linux时间同步ntp服务的安装与配置
查看>>
django.core.exceptions.ImproperlyConfigured: Requested setting DEFAULT_INDEX_TABLESPACE的解决办法...
查看>>
网络编程-socket并发-粘包问题
查看>>
python 中安装pandas
查看>>
Hibernate 的<generator class="native"></generator>的不同属性含义
查看>>
linux修改root账户的用户名所得的教训
查看>>
【LeetCode】Flatten Binary Tree to Linked List
查看>>
读后感-浮生六纪
查看>>
执行指定路径的程序文件
查看>>
Leetcode-950 Reveal Cards In Increasing Order(按递增顺序显示卡牌)
查看>>