1.转自:https://blog.csdn.net/liwenqiang758/article/details/8131185

自己动手丰衣足食!!!

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

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

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

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

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

,这是一个安全隐患。

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

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

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

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

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

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

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

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

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

  例子一:使用了泛型

 1 public class Gen<T> {
 2  private T ob; //定义泛型成员变量
 3
 4  public Gen(T ob) {
 5   this.ob = ob;
 6  }
 7
 8  public T getOb() {
 9   return ob;
10  }
11
12  public void setOb(T ob) {
13   this.ob = ob;
14  }
15
16  public void showTyep() {
17   System.out.println("T的实际类型是: " + ob.getClass().getName());
18  }
19 }
20
21 public class GenDemo {
22  public static void main(String[] args){
23  //定义泛型类Gen的一个Integer版本
24  Gen<Integer> intOb=new Gen<Integer>(88);
25  intOb.showTyep();
26  int i= intOb.getOb();
27  System.out.println("value= " + i);
28
29  System.out.println("----------------------------------");
30
31  //定义泛型类Gen的一个String版本
32  Gen<String> strOb=new Gen<String>("Hello Gen!");
33  strOb.showTyep();
34  String s=strOb.getOb();
35  System.out.println("value= " + s);
36 }
37 }

例子二:没有使用泛型

 1 public class Gen2 {
 2  private Object ob; //定义一个通用类型成员
 3
 4  public Gen2(Object ob) {
 5   this.ob = ob;
 6  }
 7
 8  public Object getOb() {
 9   return ob;
10  }
11
12  public void setOb(Object ob) {
13   this.ob = ob;
14  }
15
16  public void showTyep() {
17   System.out.println("T的实际类型是: " + ob.getClass().getName());
18  }
19 }
20
21 public class GenDemo2 {
22  public static void main(String[] args) {
23   //定义类Gen2的一个Integer版本
24   Gen2 intOb = new Gen2(new Integer(88));
25   intOb.showTyep();
26   int i = (Integer) intOb.getOb();
27   System.out.println("value= " + i);
28
29   System.out.println("----------------------------------");
30
31   //定义类Gen2的一个String版本
32   Gen2 strOb = new Gen2("Hello Gen!");
33   strOb.showTyep();
34   String s = (String) strOb.getOb();
35   System.out.println("value= " + s);
36  }
37 }

运行结果:

  两个例子运行Demo结果是相同的,控制台输出结果如下:

  T的实际类型是:

Java code
java.lang.Integer value= 88 ---------------------------------- T的实际类型是: java.lang.String value= Hello Gen! Process finished with exit code 0

  看明白这个,你的三个问题就自然而然的明白了

转载于:https://www.cnblogs.com/sharpest/p/7707041.html

T extends Serializable这是什么意思呢?看明白这个,你的问题就自然而然的明白了!...相关推荐

  1. Java泛型 T extends Serializable

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

  2. 泛型类型通常在Dao和Service 中使用BaseDaoT extends Serializable的泛型

    最近朋友几篇文章介绍了改泛型类型的文章. 关联文章的地址 经常看到那些写好的项目的dao是用的泛型,就不不理解为什么,看到了这个论坛上的两个例子,粘给大家: 泛型是Java SE 1.5的新特性,泛型 ...

  3. Spark Troubleshooting - Task not serializable问题分析

    本文首发于 www.yidooo.net/2018/08/19/- 转载请注明出处 问题描述 出现"org.apache.spark.SparkException: Task not ser ...

  4. 我对序列化(Serializable)的理解

    转自:http://blog.tianya.cn/blogger/post_show.asp?BlogID=764&PostID=3231409 序列化是把一个对象的状态写入一个字节流的过程. ...

  5. java 只去掉_30行代码带你了解Java的Serializable接口

    最近本栈在阅读Java的源码,发现JDK的String类实现了Serializable接口,并定义了一个serialVersionUID变量,它知道这个接口是为了让String类能够序列化与反序列化, ...

  6. android 保存 parcelable对象,Android 使用序列化Serializable和Parcelable

    Android 序列化Serializable和Parcelable使用和区别 一:Serializable 1.什么是序列化 将一个类对象转换成可存储,可传输状态的过程. 2.什么是Serializ ...

  7. Serializable接口和Parcelable接口

    一.Serializable接口 在Java中,一般在定义实体类(entity class)时,会去实现Serializable接口,下面举例: 重点: 使用Serializable接口很简单,只需要 ...

  8. Serializable接口的意义

    程序员面试时,序列化知识点经常会遇到. 张工是一名java程序员,工作5年了,一直从事java开发.最近到某互联网公司面试,做了笔试题后,有一道笔试题是这样子的:Serializable有什么作用,张 ...

  9. Serializable是什么,为什么要实现Serializable接口?

    Serializable是什么,为什么要实现Serializable接口? 什么是Serializable接口 什么是序列化? 为什么要序列化对象 什么情况下需要序列化? 为什么要定义serialve ...

最新文章

  1. OP_REQUIRES failed at conv_ops.cc:386 : Resource exhausted: OOM when allocating tensor with shape..
  2. TypeError: Input 'b' of 'MatMul' Op has type float32 that does not match type int32 of argument 'a'.
  3. 52 个深度学习目标检测模型汇总,论文、源码一应俱全!(附链接)
  4. 移动端页面自适应解决方案—rem布局(进阶版)
  5. DevExpress.XtraGrid
  6. 递归查询mysql数据库设计
  7. nginx 源码学习笔记(二十一)—— event 模块(二) ——事件驱动核心ngx_process_events_and_timers
  8. sudo apt install 遇到关于 lock 的错误消息
  9. VS2015配置freegult
  10. java .net 互通redis_C# servicestack.redis 互通 java jedis
  11. 页面上通过地址栏传值时出现乱码的两种解决方法
  12. git小乌龟版本回退
  13. ​ClickHouse在手淘流量分析业务实践
  14. Delphi中三种延时方法
  15. 官网下载windows系统
  16. 抖音直播团队部门岗位KPI考核主播绩效制度
  17. win10安装openssl
  18. 我是怎么看friends练口语的(转贴)
  19. ‘dict’的神奇魔法
  20. RTSP/Onvif安防视频云平台EasyNVR显示视频流却播放不了,是什么原因?

热门文章

  1. 2015级C++第14周实践项目 模板
  2. RHEL5+PXE+DHCP+Apache+Kickstart安装RHCE5.1 i386实验室环境
  3. Java数据访问对象模式
  4. 字符串转换成utf-8编码
  5. 大白话讲解Promise(二)理解Promise规范
  6. http://demo.netfoucs.com/jianglonghuang/article/details/44888133
  7. hibernate4中取得connection的方法
  8. SQL Server 对比数据库差异
  9. A simple class to play sound on netcf (part 2)
  10. ORA-01113 file 1 needs media recovery