给大忙人看的Java核心技术笔记(6、泛型编程)

要点:

  泛型类是带有一个或多个类型参数的类

  泛型方法是带有类型参数的方法

  可以要求类型参数必须是一个或者多个类型的子类型

  泛型类型是不变得:当S是T的子类型是,G<S>和G<T>没有关系

  通过使用通配符G<? extends T>或者 G<? super T>,你可以指定一个方法接受一个带子类或父类参数的泛型类型的实例

  当泛型类和方法被编译时,类型参数会被擦除

  类型擦除对泛型有诸多限制。特别是,不能实例化泛型类或数组。不能转换成泛型类型,或者抛出一个泛型类型对象。

  即使泛型类和方法在虚拟机中被擦除,你也可以在运行时找出他们是如何声明的。

1、泛型类

  ※类型参数不能用基本类型实例化。例如Entry<String, int>在Java中是无效的。

  当构造一个泛型类对象时,可以在构造函数中省略类型参数。

1 Entry<String, Integer> entry = new Entry<>("1",1);

2、泛型方法

  当声明一个反洗方法时,类型参数要放在修饰符之后,返回类型之前。当调用时,不要指定类型参数。它可以从方法的参数和返回类型中推断出来。

  也可以在调用时候显示的写出来

1 public static <T> void swap(T[] array, int i, int j);
2 Arrays.<String>swap(friends,0,1);

3、类型限定

  泛型类或方法的类型参数需要满足某些要求,或者是需要能够调用一些通用的方法。可以对类型做出限定。

  T extends AutoCloseable

  类型参数可以有多个限定:  T extends Runnable & AutoCloseable

  ※可以有多个接口限定,但最多只能有一个是类。如果有一个限定是类,则它必须放在限定列表的第一位。

时间: 2024-08-27 12:09:47

给大忙人看的Java核心技术笔记(6、泛型编程)的相关文章

给大忙人看的Java核心技术笔记(7、集合)

要点: 1.Collection接口为所有集合类提供了共同方法(映射除外,映射是通过Map接口描述的) 2.列表是一个有序集合,其中的每个元素都有一个整数索引 3.set针对高效包含测试进行过优化.Java提供了HashSet和TreeSet实现 4.对映射来说,可以选择HashMap或TreeMap实现.LinkedHashMap会记住元素插入的顺序. 5.Collection接口和Collections类提供了很多有用的算法:如设置操作,查询.排序.打乱原先顺序等 6.视图通过使用标准集合接

给大忙人看的Java核心技术笔记(4、继承与反射)

继承是在现有类的基础上创建新类的过程.(实例变量和静态变量统称为域,类中的域.方法.嵌套类.接口统称为类成员) 反射机制:在程序运行期间查找类及其成员的能力 abstract方法没有实现:abstract类不能被实例化. 子类不能直接访问父类的私有实例变量. 不同于this引用,super不是对象的引用,而是绕过动态查找方法并调用特定方法的指令. 覆盖一个方法时,可以将返回类型改成子类型(协变返回类型是允许的) 重载一个方法时,子类方法的可见性至少与父类方法一样.父类方法是公有的,子类方法也必须

给大忙人看的Java核心技术笔记(10、并发编程)

本章要点: Runnable表述一个可以异步执行的任务 Executor将Runnable实例列入执行计划 Callable描述一个会产生结果的任务 可以向ExecutorService提交一个或多个Callable实例,并且当这些Callable有执行结果后,合并这些结果 当多个线程在没有同步的情况下操作共享数据时,其结果是不可预知的 与使用锁机制编程相比,并行算法和线程安全的数据结构更好 并行Stream和数组操作可以自动并且安全地将计算并行化运行 ConcurrentHashMap是线程安

给大忙人看的Java核心技术笔记(3、接口和lambda表达式)

1.接口是面向对象的关键特性:他们让你在不提供实现的情况下,指定应该做什么 近来,应为函数式编程非常适合并发和事件驱动编程,其重要性有所提升 接口的所有方法默认为公有方法,不用特意声明为public 实现类必须将接口方法声明为public,否则默认情况下,他们在包级别可访问.应为接口要求public级别访问,所以会报错 如果一个类只实现接口的某些方法,必须用abstract修饰 2.转换为接口类型 IntSequence digits = new DigitSequence(); 这句话创建的对

《写给大忙人看的java》笔记--基本的编程结构

1.字符串是UTF-16编码中的Unicode编码点的序列 2.绑定System.in的Scanner可以读取终端输入: p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Monaco } span.s1 { text-decoration: underline; color: #7e504f } span.s2 { color: #931a68 } span.s3 { color: #0326cc } Scanner sc = new S

《写给大忙人看的java se 8》笔记

现在才来了解java8,是不是后知后觉了点? 新的编程技术,个人不喜欢第一时间跟进. 待社区已有实践积淀再切入似乎更划算些? 一点点精明的考虑. 不多说,上代码. //读<写给大忙人看的java se 8>做的笔记代码 //希望对忙到连这书都没工夫看的你,匆匆一瞥,留下印象 //祝编程愉快 public class MainTest { //第一章,讲lambda表达式 //lambda表达式类似javascript的函数字面量,可用于替代java的匿名内部类 //基本型为 (形参列表)-&g

Java核心技术 笔记五 OOP

java 的核心就是面向对象 (完全面向对象的) 面向对象程序设计 就必须清楚对象的三个主要特性 1.对象的行为 2.对象的状态 3.对象标识 除此之外 还需要了解对象之间的关系 比较常见的关系有 依赖 继承 聚合 在Java程序中 程序员应该尽可能的将相互依赖的类减到最少  即减少类间的耦合度 在Java中  并不是所有的类都是具有面向对象的特征 如math类 date类 在对象与对象变量之间存在着一个重要的区别 Date deadline; 这里的定义了一个对象变量deadline   它可

java学习笔记四:static的几个角落及小谈多态

最近有点事情,没有及时更新笔记,学习不可弃,总结一下最近的学习,其中重点是static的一些应用,多态是一种设计理念,了解较容易,想如火纯清的确不是一件容易的事情. 对于static,主要有两点是我所学习的. 1.首先简单的介绍一下static的定义.static是静态的意思,就是说这个类变量或者类方法不需要实例化就可以使用.使用static的变量是类变量,也成为静态域(static field).这些是static的基本语义,了解了这些,继续向下看. java核心技术(卷一)对于静态有这样一段

Java核心技术 卷1 读书笔记 (3 Java基本程序设计结构)

3.3 数据类型 Java是强类型语言,必须为每一个变量声明一种类型. 3.3.1 整型 Java 提供四种整型 int 4字节 short 2字节 long 8字节 byte 1字节 长整型(long)数值有一个后缀L(例如40000000000L),十六进制数值有一个前缀0x(例如0xCAFE),八进制数值有一个前缀0(例如010). 3.3.2 浮点型 Java提供两种浮点类型 float 4字节 double 8字节 float类型的数值有一个后缀F(例如3.42F),没有后缀F的浮点数