Java泛型 T extends Serializable

前言
泛型是jdk1.5引入的特性,为了定义参数的类型,代替Object,实现隐式转换。
< T extends Serializable>就是定义了参数T的属性必须实现Serializable

案例

  1. 泛型实现
public class Gen<T> {private T ob;public Gen() {}public Gen(T ob) {this.ob = ob;}public T getOb() {return ob;}public void setOb(T ob) {this.ob = ob;}@Overridepublic String toString() {return "Gen{" +"ob=" + ob +'}';}public void showTyep() {System.out.println("T的实际类型是: " + ob.getClass().getName());}
}class GenDemo {public static void main(String[] args) {Gen<Integer> intOb = new Gen<>(88);intOb.showTyep();int i = intOb.getOb();System.out.println("value= " + i);System.out.println("----------------------------------");Gen<String> strOb = new Gen<>("Hello Gen!");strOb.showTyep();String s = strOb.getOb();System.out.println("value= " + s);}
}
  1. Object实现
public class Gen<T> {private T ob;public Gen() {}public Gen(T ob) {this.ob = ob;}public T getOb() {return ob;}public void setOb(T ob) {this.ob = ob;}@Overridepublic String toString() {return "Gen{" +"ob=" + ob +'}';}public void showTyep() {System.out.println("T的实际类型是: " + ob.getClass().getName());}
}class GenDemo {public static void main(String[] args) {Gen<Integer> intOb = new Gen<>(88);intOb.showTyep();int i = intOb.getOb();System.out.println("value= " + i);System.out.println("----------------------------------");Gen<String> strOb = new Gen<>("Hello Gen!");strOb.showTyep();String s = strOb.getOb();System.out.println("value= " + s);}
}

总结
泛型是Java SE 1.5的新特性,泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。

这种参数类型可以用在类、接口和方法的创建中,分别称为泛型类、泛型接口、泛型方法。

Java语言引入泛型的好处是安全简单。

在Java SE 1.5之前,没有泛型的情况的下,通过对类型Object的引用来实现参数的“任意化”,“任意化”带来的缺点是要做显式的强制类型转换,

而这种转换是要求开发者对实际参数类型可以预知的情况下进行的。对于强制类型转换错误的情况,编译器可能不提示错误,在运行的时候才出现异常

,这是一个安全隐患。

泛型的好处是在编译的时候检查类型安全,并且所有的强制转换都是自动和隐式的,提高代码的重用率。

泛型在使用中还有一些规则和限制:

1、泛型的类型参数只能是类类型(包括自定义类),不能是简单类型。

2、同一种泛型可以对应多个版本(因为参数类型是不确定的),不同版本的泛型类实例是不兼容的。

3、泛型的类型参数可以有多个。

4、泛型的参数类型可以使用extends语句,例如。习惯上成为“有界类型”。

5、泛型的参数类型还可以是通配符类型。例如Class<?> classType = Class.forName(java.lang.String);

泛型还有接口、方法等等,内容很多,需要花费一番功夫才能理解掌握并熟练应用。在此给出我曾经了解泛型时候写出的两个例子(根据看的印象写的),

实现同样的功能,一个使用了泛型,一个没有使用,通过对比,可以很快学会泛型的应用,学会这个基本上学会了泛型70%的内容。

Java泛型 T extends Serializable相关推荐

  1. Java泛型中extends T和super T的区别?

    <? extends T>和<? super T>是Java泛型中的"通配符(Wildcards)"和"边界(Bounds)"的概念. ...

  2. Java泛型中extends和super的理解(转)

    E – Element (在集合中使用,因为集合中存放的是元素) T – Type(Java 类) K – Key(键) V – Value(值) N – Number(数值类型) ? – 表示不确定 ...

  3. Java泛型中extends和super的区别?

    区别 <? extends T>和<? super T>是Java泛型中的"通配符(Wildcards)"和"边界(Bounds)"的概 ...

  4. Java 泛型 super extends 边界

    1 为什么要用通配符和边界? 使用泛型的过程中,经常出现一种很别扭的情况 比如我们有Fruit类,和它的派生类Apple class Fruit {} class Apple extends Frui ...

  5. 困扰我多年的Java泛型〈? extends T 〉和 〈? super T 〉,终于搞清楚了!

    作者:JavaEdge 来源:www.jianshu.com/p/ff5f5b7e8b93 一.为什么要用通配符和边界? 使用泛型的过程中,经常出现一种很别扭的情况. 比如我们有Fruit类,和它的派 ...

  6. 【Java】泛型中 extends 和 super 的区别?

    <? extends T>和<? super T>是Java泛型中的"通配符(Wildcards)"和"边界(Bounds)"的概念. ...

  7. java 泛型 class t_java 泛型中classT 和T的区别是什么?

    public boolean edit(T entity) 和public T get(Class c, Serializable id)中这两种参数的定义和调用有什么区别? public boole ...

  8. Java泛型的类型擦除

    写在前面:最近在看泛型,研究泛型的过程中,发现了一个比较令我意外的情况,Java中的泛型基本上都是在编译器这个层次来实现的.在生成的Java字节代码中是不包含泛型中的类型信息的.使用泛型的时候加上的类 ...

  9. Java泛型 通配符? extends与super

    本文来源:https://i.cnblogs.com/EditPosts.aspx?opt=1 感谢博主.本文仅供参考学习. Java 泛型 关键字说明 ? 通配符类型 <? extends T ...

最新文章

  1. 浙江大学软件学院2020年保研上机模拟练习 7-3 Partial School Ranking
  2. 往hdfs写数据无权限
  3. python把字符串转化为字典_python 将字符串转换成字典dict的各种方式总结
  4. Iphone在ScrollView下点击TextField使文本筐不被键盘遮住
  5. uva 10801 - Lift Hopping(最短路Dijkstra)
  6. default value mysql_Mysql Field * doesn't have a default value解决方法
  7. XMind软件简易使用教程
  8. VIVADO 安装教程
  9. 慕课软件质量保证与测试(第二章.课后作业)
  10. 64位Python读取周立功USBCAN-I信息
  11. 使用Arduino驱动 ADS1115 ADC采样芯片
  12. 免费WiFi上网软件之WiFi共享精灵
  13. 未来10年,软件开发技术的8个发展趋势
  14. html - 空格符号 - 字符实体 - 预留字
  15. html div浏览器居中显示,IE浏览器DIV居中实现方法
  16. jdbc入门到精通1.1访问数据库实战
  17. mavens使用阿里云国内私服下载
  18. 西电C++期末考点整理
  19. 【MATLAB】Linux下的matlab的安装
  20. 《数字电子电路》 课程设计:十字路口红绿灯自动控制系统(上)(multisim仿真及PCB实现)

热门文章

  1. 对rtthread系统的理解
  2. Google Earth Engine(GEE)——Error: Exported bands must have compatible data types; found inconsistent
  3. 【2022年终总结】勇敢追梦,去和人生博弈
  4. 数商云:搭建B2B撮合交易平台,以“三新”战略驱动化工企业利润高增长
  5. 53KF 客服系统主动发起设置技巧
  6. python考试搜题神器_python实现百万英雄答题神器
  7. Studio5000 V33初学(一):FAL指令
  8. 很多朋友问我:什么是博客?为什么要博客!
  9. SpringBoot整合第三方技术学习笔记(自用)
  10. Unable to locate tools.jar. Expected to find it in /usr/lib/jvm/java-1.5.0-gcj-4.5/lib/tools.jar 求解