当前位置: 首页 > 编程日记 > 正文

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

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

相关文章:

C#中switch语句注意

大家肯定对switch语句并不陌生&#xff0c;它能够让程序根据控制表达式的值&#xff0c;从多个动作中作出选择(从逻辑过程看&#xff0c;和多分支语句if&#xff0d;else有些相似)。在C和java中也有这一语句&#xff0c;不过在C#中&#xff0c;这一语句则有了些变化。先看下边一…

对Cost (%CPU) 粗略的理解

今天研究执行计划&#xff0c;看到执行计划里面有Cost (%CPU)&#xff0c;我这边研究了一把&#xff0c;不知道对与否&#xff0c;拿出来晒晒在Oracle 10g中&#xff0c;Oracle 把CPU的cost也统计在执行计划中去了&#xff0c; 这和以前的8i,9i(9i其实已经开始了)有很大的不同。…

后疫情时代,RTC期待新的场景大爆发

整理 | 寇雪芹头图 | 下载于ICphoto出品 | AI 科技大本营&#xff08;ID:rgznai100&#xff09; 过去的一年中&#xff0c;新冠疫情悄然改变了社会发展和人们的生活&#xff0c;也助推了实时音视频&#xff08;Real-Time Communication&#xff09;技术的落地应用&#xff0c;数…

JS-DOM-元素节点

查看元素节点: 1、getElementById():通过 id 取到唯一节点;如果 id 重名,只能取到第一个 getElementByName(): 通过name属性 getElementByTagName(): 通过标签名 getElementByClassName(): 通过class名 获取元素节点时,一定要注意:获取节点的语句,必须在 DOM 渲染完成之后执行。…

现代软件工程 第十章 【典型用户和场景】 练习与讨论

1. 讨论&#xff1a;下面的老板犯了什么错误? 只看用户的表面语言或行动还是不够的。我们还要找到用户语言行动背后的动机! (图像来源: http://www.weibo.com/funnyshoelace) 2. 是否要文档 有人说&#xff0c;我们敏捷的团队&#xff0c;就喜欢直接的面对面的交流&#xff0…

赠书 | 读懂生成对抗神经网络 GAN,看这文就够了

生成对抗神经网络&#xff08;Generative Adversarial Nets&#xff0c;GAN&#xff09;是一种深度学习的框架&#xff0c;它是通过一个相互对抗的过程来完成模型训练的。典型的GAN包含两个部分&#xff0c;一个是生成模型&#xff08;Generative Model&#xff0c;简称G&#…

把Doc文档转换成rtf格式

先在项目引用里添加上对Microsoft Word 9.0 object library的引用。 using System; namespace DocConvert { class DoctoRtf { static void Main() { //创建一个word的实例 Word.Application newApp new Word.Application(); // 指定源文件和目标文件 object Source&quo…

中国书法的造型元素与原理 刘彦湖

为什么80%的码农都做不了架构师&#xff1f;>>> --------------------------------------------------------------------------------中国书法的造型元素与原理 刘彦湖 中国书法是用最基本的元素遵从中国人特有的形式原则建构起来的大厦。 对于元素及其品质的认…

融云任杰:强互动,RTC 下一个“爆点”场景 | 拟合

从无序中寻找踪迹&#xff0c;从眼前事探索未来。2021 年正值黄金十年新开端&#xff0c;CSDN 以中立技术社区专业、客观的角度&#xff0c;深度探讨中国前沿 IT 技术演进&#xff0c;推出年度重磅企划栏目——「拟合」&#xff0c;通过对话企业技术高管大咖&#xff0c;跟踪报…

推荐一个个人感觉比较有吸引力的网站

2019独角兽企业重金招聘Python工程师标准>>> 廖雪峰的官方网站 转载于:https://my.oschina.net/AaronCN/blog/294293

C# 2进制、8进制、10进制、16进制...各种进制间的轻松转换

在.NET Framework中&#xff0c;System.Convert类中提供了较为全面的各种类型、数值之间的转换功能。其中的两个方法可以轻松的实现各种进制的数值间的转换&#xff1a; Convert.ToInt32(string value, int fromBase)&#xff1a; 可以把不同进制数值的字符串转换为数字&#x…

solrj操作单机solr

2019独角兽企业重金招聘Python工程师标准>>> 在目前的生产过程中全文检索技术应用越来越广&#xff0c;其中涌现了一批非常好得开源搜索引擎框架&#xff0c;如solr,elasticsearch等等。其中我工作使用最多的是solr&#xff0c;并在此对之前工作做一个总结。 solr的…

基于微软开源深度学习算法,用 Python 实现图像和视频修复

‍‍作者 | 李秋键编辑 | 夕颜出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09;图像修复是计算机视觉领域的一个重要任务&#xff0c;在数字艺术品修复、公安刑侦面部修复等种种实际场景中被广泛应用。图像修复的核心挑战在于为缺失区域合成视觉逼真和语义合理的像素&…

C#实现光盘做启动盘

一 &#xff1a;编程思想 1、创建启动盘 插入要创建的启动盘&#xff0c;程序自动检测光驱中光盘&#xff0c;利用WMI&#xff08;Windows管理架构&#xff1a;Windows Management Instrumentation&#xff09;读取该光盘的序列号&#xff08;具有唯一性&#xff09;&#xf…

为云服务立规矩——首批可信云服务认证名单公布

俗话说&#xff0c;没有规矩不成方圆。在云服务蓬勃发展的今天&#xff0c;无论从规范行业发展&#xff0c;还是为用户提供保障&#xff0c;推动政府云服务采购的角度来说&#xff0c;云服务市场都需要立规矩。7月15日至16日&#xff0c;以“可信中国云&#xff0c;未来新生态”…

Java:多个文档合并输出到一个文档

多个文档合并输出到一个文档 方法&#xff1a;Java NIO package First;import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.nio.channels.FileChannel; import java.nio.channels.WritableByteChannel;public class Test {pu…

线性表之顺序表(C语言实现)

线性表是从数据元素的逻辑结构上定义的. 这种数据元素的逻辑结构的特征如下: 1.除开第一个和最后一个元素之外.所有元素都有一个前驱元素和后继元素. 2.第一个元素无前驱元素,但有后继元素. 3.最后一个元素有前驱元素,单无后继元素. 可以抽象为如下表述: 元素1元素2元素3元素4元…

C# POP3编程

POP3的使用很简单,所以.net没有向SMTP那样给出相应的类来控制. 废话少说,程序员最需要的使代码,:)! 1.打开VS.NET 2003. 2.新建一个WinForm Application. 3.添加命名空间 using System; using System.Drawing; using System.Collections; using System.ComponentModel; usi…

终于有人把 Python 讲清楚了!

Python因为其优越的特性广泛应用于数据分析、人工智能、Web开发、后端开发、自动化测试/运维、爬虫等领域&#xff0c;也得到了很多企业的青睐。甚至连BATZJ的技术大牛&#xff0c;都无可否认Python现在对于一个程序员发展的重要性&#xff01;最近一两年&#xff0c;我身边也有…

ASP.NET Core的配置(5):配置的同步[设计篇]

本节所谓的“配置同步”主要体现在两个方面&#xff1a;其一&#xff0c;如何监控配置源并在其变化的时候自动加载其数据&#xff0c;其目的是让应用中通过Configuration对象承载的配置与配置源的数据同步&#xff1b;其二、当Configuration对象承载的配置放生变换的时候如何向…

C#分析数据库结构,使用XSL模板自动生成代码

<html> <head> <TITLE>分析数据库结构,自动生成代码</TITLE> <meta http-equiv"Content-Type" content"text/html; charsetgb2312"> </head> <frameset cols"237,767" rows"*"> <…

超棒整理 | Python 关键字知识点大放送

作者 | 黄伟呢来源 | 数据分析与统计学之美其实前面我已经为大家总结了《Python系统关键字 “超全总结” 及其 “含义”》。今天呢&#xff0c;我将对每一个关键字列出一个例子&#xff0c;供大家参考学习和记忆。1、and、or、notand、or、not关键字都是逻辑运算符&#xff0c;…

linux下java进程占用高问题分析过程

2019独角兽企业重金招聘Python工程师标准>>> 1.用top命令找出占用cpu高的进程&#xff0c;记录下pid 2.用top -H -p pid(上面的pid)查看该进和下各线程占用cpu的情况&#xff0c;找出占用cpu高的线程pid 3.printf "%x\n" pid(上面线程的pid)打印出对应的十…

AWS - Couldformation 初探

AWS里面&#xff0c;所有的管理界面的功能都可以通过API或者JSON脚本实现&#xff0c;这样的好处是很容易的就和cloudwatch一起实现各种HA和autoscaling的应用。豆子初次使用cloudformation&#xff0c;写了一个简单JSON来创建一个EBS的Volume。我的模板定义的很简单&#xff0…

清华团队让 AI 写诗“更上一层楼”,诗歌图灵测试迷惑近半数玩家

作者 | 黄珊来源 | 数据实战派比特币外挖无穷洞&#xff0c;机神犹未休。卡中窥币影&#xff0c;池里验沙流。屡载吸金主&#xff0c;孤深渍盗求。方知区块链&#xff0c;本是古来游。这首诗歌来自一支清华团队开发的古诗 AI。它的创作才华可不仅限于此。再看下面这首诗&#x…

js中Dom元素及获取方法

DOM基础对象documentdocument.documentElement html部分document.head document.titledocument.body body部分获取元素对象方法document.getElementById(); 通过id找到对象document.getElementsByTagName(); 通过标签名找到对象并放到数组集合中document.getElementsByNam…

JavaBean简单及使用

一、JavaBean简介 JavaBean是使用Java语言开发的一个可重用的组件&#xff0c;在JSP的开发中可以使用JavaBean减少重复代码&#xff0c;使整个JSP代码的开发更简洁。JSP搭配JavaBean来使用&#xff0c;有以下的优点&#xff1a; 1.可将HTML和Java代码分离&#xff0c;这主要是为…

华为发布《AR洞察与应用实践白皮书》,提出用5G点燃AR,用AR照亮5G

[中国&#xff0c;深圳&#xff0c;2021年06月17日] 今日&#xff0c;在华为共赢未来5GAR全球峰会&#xff08;Better World Summit&#xff09;上&#xff0c;华为运营商BG首席营销官蔡孟波&#xff0c;发表了主题演讲《5GAR&#xff0c;让梦想照进现实》&#xff0c;提出用5G…

C#中虚函数,抽象,接口的简单说明

虚函数&#xff1a;由virtual声明&#xff0c;它允许在派生类中被重写&#xff0c;要重写方法&#xff0c;必须先声名为virtual public class myclass { public virtual int myint() { 函数体&#xff1b;} } class myclass1:myclass { public override int myint() { 函数体1&…

【开源】博客园文章编辑器4.0版发布

源起 最近个人时间多起来了&#xff1b; 于是打算持续写一点东西&#xff1b; 前面写了两篇关于riot.js的东西&#xff1b; 被博客园的领导移出首页了&#xff1b; 原因之一是排版不整齐&#xff1b; 确实是不整齐&#xff0c;这我认&#xff0c; 然而&#xff0c;我自己可是博…