1.0.0 Summary

Tittle:【Java】-NO.16.EBook.4.Java.1.009-【疯狂Java讲义第3版 李刚】- 泛型

Style:EBook

Series:Java

Since:2017-09-22

End:....

Total Hours:...

Degree Of Diffculty:2

Degree Of Mastery:2

Practical Level:2

Desired Goal:2

Archieve Goal:....

Gerneral Evaluation:...

Writer:kingdelee

Related Links:

http://www.cnblogs.com/kingdelee/

1.泛型

泛型可以使用在类、方法、对象中

1.1 继承泛型

在一个类中,父类显式写明的泛型,子类不能再重复写,只能写子类自己的

// 1. 在一个类中,父类显式写明的泛型,子类不能再重复写,只能写子类自己的

public class A1 extends Apple

{

// 正确重写了父类的方法,返回值

// 与父类Apple的返回值完全相同

public String getInfo()

{

return "子类" + super.getInfo();

}

public T getT(T t){

System.out.println("A1:" + t.toString());

return t;

}

/*

// 下面方法是错误的,重写父类方法时返回值类型不一致

public Object getInfo()

{

return "子类";

}

*/

public static void main(String[] args) {

AA stringIntegerAA = new AA<>();

stringIntegerAA.getT("a");

}

}

class AA extends A1{

@Override

public T getT(T o) {

super.getT(o);

System.out.println("AA:");

return o;

}

}

1.2 泛型不能作为静态对象的申明,不能作为静态方法的形参,但是可以作为静态方法的方法体中的参数使用。

public class R

{

// 下面代码错误,不能在静态变量声明中使用类型形参

//static T info;

T age;

public void foo(T msg){}

// 下面代码错误,不能在静态方法声明中使用类型形参

//public static void bar(T msg){}

// 只能写在void之后,不能写在static之后

//public static void bar(Object msg){}

// 泛型不能作为参数传进来,却能作为方法中的参数来使用

public static void bar(Object msg){ T t = null;}

}

1.3 数组和集合中泛型问题

假设Foo是Bar的子类,G和G之间不存在继承关系,即G不能传给G,但Foo[] 是 Bar[]的子类,Foo[]可以传给Bar[]

3. 泛型通配符

3.1 >使用这种时,他的类型就是Object,往往作为方法中传递的形参使用,而不是申明使用。在做形参使用时,往往与 extends 或者 super来一起使用,限定参数范围。

public void drawAll(List extends Shape> shapes)

{

for (Shape s : shapes)

{

s.draw(this);

}

}

3.2 泛型与通配符

当某个泛型不会作为返回值,也不会被某些参数依赖,则使用通配符更优

3.3 构造器泛型的申明语法,即 new A();

class MyClass {

public MyClass(T t) {

System.out.println("t参数的值为:" + t);

}

}

public class GenericDiamondTest {

public static void main(String[] args) {

// MyClass类声明中的E形参是String类型。

// 泛型构造器中声明的T形参是Integer类型

MyClass mc1 = new MyClass<>(5);

// 显式指定泛型构造器中声明的T形参是Integer类型,

MyClass mc2 = new MyClass(5);

// MyClass类声明中的E形参是String类型。

// 如果显式指定泛型构造器中声明的T形参是Integer类型

// 此时就不能使用"菱形"语法,下面代码是错的。

//MyClass mc3 = new MyClass<>(5);

}

}

3.4 类型推断

// 1.类型推断, A.a();

class MyUtil

{

public static MyUtil nil()

{

return null;

}

public static MyUtil cons(Z head, MyUtil tail)

{

return null;

}

E head()

{

return null;

}

}

public class InferenceTest

{

public static void main(String[] args)

{

// 可以通过方法赋值的目标参数来推断类型参数为String

MyUtil ls = MyUtil.nil();

// 无需使用下面语句在调用nil()方法时指定类型参数的类型

MyUtil mu = MyUtil.nil();

// 可调用cons方法所需的参数类型来推断类型参数为Integer

MyUtil.cons(42, MyUtil.nil());

// 无需使用下面语句在调用nil()方法时指定类型参数的类型

MyUtil.cons(42, MyUtil.nil());

// 希望系统能推断出调用nil()方法类型参数为String类型,

// 但实际上Java 8依然推断不出来,所以下面代码报错

//String s = MyUtil.nil().head();

String s = MyUtil.nil().head();

}

}

李刚疯狂java讲义第3_【Java】-NO.16.EBook.4.Java.1.009-【疯狂Java讲义第3版 李刚】- 泛型...相关推荐

  1. java version 和javac版本不一致_解决linux下javac -version和java -version版本显示不一致...

    [javascript] view plaincopy [root@localhost usr]# $JAVA_HOME/bin/java -version bash: /bin/java: 没有那个 ...

  2. JAVA并发编程3_线程同步之synchronized关键字

    在上一篇博客里讲解了JAVA的线程的内存模型,见:JAVA并发编程2_线程安全&内存模型,接着上一篇提到的问题解决多线程共享资源的情况下的线程安全问题. 不安全线程分析 public clas ...

  3. 给JAVA初学者的建议(转载治phphot的一个牛人给java初学者的建议)

    给初学者之一:浅谈java及应用 学java不知不觉也已经三年了 从不知java为何物到现在一个小小的j2ee项目经理 虽说不上此道高手,大概也算有点斤两了吧 每次上网,泡bbs逛论坛,没少去java ...

  4. java中override快捷键_【基础回溯1】面试又被 Java 基础难住了?推荐你看看这篇文章。...

    本文已经收录自 https://github.com/Snailclimb/JavaGuide  (59k+ Star):[Java学习+面试指南] 一份涵盖大部分Java程序员所需要掌握的核心知识. ...

  5. 尚学堂java培训_送给 Java 自学者或者初学者的最全知识清单,2020 年 Java 就该这么学...

    最近逛知乎,发现有很多想自学 Java 或者 Java 初学者提问,不知道如何学习 Java?我接触 Java 快 8 年的时间了,一直从事 Java 开发工作,自己一直升级打怪,对于如何更好的学习 ...

  6. java集成r语言_R语言- 实验报告 - 利用R语言脚本与Java相互调用

    一.实训内容 利用R语言对Java项目程序进行调用,本实验包括利用R语言对java的.java文件进行编译和执行输出. 在Java中调用R语言程序.本实验通过eclipse编写Java程序的方式,调用 ...

  7. Jenkins 2.16.3默认没有Launch agent via Java Web Start,如何配置使用

    问题:Jenkins 2.16.3默认没有Launch agent via Java Web Start,如下图所示,而这种启动方式在Windows上是最方便的. 如何设置才能让出来呢? 打开&quo ...

  8. java 性能调优:35 个小细节,让你提升 java 代码的运行效率

    作者:萌小Q www.cnblogs.com/Qian123/p/6046096.html 前言 代码优化 ,一个很重要的课题.可能有些人觉得没用,一些细小的地方有什么好修改的,改与不改对于代码的运行 ...

  9. java二级考试历年真题6_2018年3月计算机二级考试JAVA试题及答案(六)

    2018年计算机等级考试开考在即,小编在这里为考生们整理了2018年3月计算机二级考试JAVA试题及答案,希望能帮到大家,想了解更多资讯,请关注出国留学网的及时更新哦. 2018年3月计算机二级考试J ...

最新文章

  1. 【opencv】opencv在图片、视频嵌中英文字符的方法
  2. linux 运行pfx文件,Linux下pfx证书导出key和crt
  3. JUnit,Logback,带有Maven 3的Maven
  4. 郸城二高2021年高考成绩查询时间,河南高考最高分是谁,2021年河南高考状元名单分数学校...
  5. linux ps 进程组,linux进程管理(2)---进程的组织结构
  6. 电子计算机工程 专业大学排名,电子与计算机工程专业大学排名 2021全国排行榜...
  7. 【最新snapshot】DCMTK3.6.1(MD支持库)安装说明
  8. MySql的备份与恢复
  9. flume-ng命令
  10. 如何取消提交我在Git中的最后一次提交[重复]
  11. python房屋租赁系统的设计与实现_基于ssh的房屋租赁系统的设计与实现(含源文件)...
  12. 查看微信公众号文章发布时间
  13. 最大化参数 火车头_新手必看的火车头采集器使用入门教程_图文解说版!(看完包会)...
  14. 关于对接网易云即时通信IM的心得
  15. 51c语言延时作用,51单片机C语言延时函数的使用 - 51单片机C语言延时函数怎么定义和使用...
  16. 用计算机绘制二项分布概率图,二项分布和泊松分布实验.doc
  17. 公关广告策略分析:如何结合广告的推力和公关的拉力
  18. 视频处理基础知识整理
  19. 【机器学习 深度学习】通俗讲解集成学习算法
  20. power Designer VBS 脚步 通过 excel 生成实体,不用一个一个的输入。

热门文章

  1. 【Java八股文之基础篇(十九)】函数式编程之Stream流(上)
  2. 《nodejs+gulp+webpack基础实战篇》课程笔记(六)--附加课
  3. 2022-05-25 网工进阶(七)OSPF-影响邻居关系建立的因素、路由撤销、路由汇总、路由过滤、Silent-Interface、报文认证
  4. P5231 [JSOI2012]玄武密码(SAM 经典运用)
  5. 郁闷,做了很多无用功
  6. 安徽农村信用社网银转账显示服务器无响应,农村信用社企业网银转账显示状态无效是怎么回事...
  7. BlankDTX9Window - DirectX9c 程序的模板[原创]
  8. android中的系统应用
  9. 上微信 找不到服务器,【微信连接不上服务器】微信连接不上服务器怎么办?...
  10. 项目开发流程(简述)