学习笔记,仅供参考,有错必纠


文章目录

  • 泛型类
    • 泛型类概述
    • 泛型方法
    • 泛型接口
    • 泛型通配符

泛型类

泛型类概述

泛型类,就是在定义类时,在类名后加一个尖括号:

public class 类名<泛型类型1,…>
//一般泛型会设置为一个大写字母,比如<T>等等

需要注意的是,泛型类型必须是引用类型。在我们定义这个泛型时,该泛型并没有明确的数据类型,但是当我们创建该类对象时,我们指定的泛型类型是啥(比如<Person>),这个泛型类型<T>就是啥。

比如,在我们创建ArrayList对象时,我们指定泛型为<Person>,那我们就只能在其中添加Person类型的元素,而不能添加其他类型的元素(比如String, Integer等等),否则会在编译时报错:

package com.guiyang.restudy3;import java.util.ArrayList;
import java.util.Iterator;import com.guiyang.bean.Person;public class D1Genric {public static void main(String[] args) {ArrayList<Person> list = new ArrayList<Person>();list.add(new Person("张三", 23));list.add(new Person("李四", 24));Iterator<Person> it = list.iterator();while(it.hasNext()) {Person p = it.next();System.out.println(p.getName() + "..." + p.getAge());}}
}
  • 自定义泛型类
package com.guiyang.object;public class Tool<Q> {private Q q;public Q getobj() {return q;}public void setobj(Q q) {this.q = q;}
}

泛型方法

  • 泛型方法概述

具有一个或多个类型变量的方法,称之为泛型方法。泛型方法可以存在于泛型类中,也可以存在于非泛型类中。泛型方法最好与类的泛型一致,如果不一致,需要在方法上声明该泛型。

简而言之,泛型方法,就是把泛型定义在方法上的方法。

  • 定义格式
public <泛型类型> 返回类型 方法名(泛型类型 变量名)
  • 自定义泛型类,非静态泛型方法,静态泛型方法
package com.guiyang.object;public class Tool<Q> {private Q q;public Q getobj() {return q;}public void setobj(Q q) {this.q = q;}public<T> void show(T t) {System.out.println(t);}public static<W> void print(W w) {System.out.println(w);}
}

注意!非静态泛型方法的泛型可以与类的泛型类型一致,也可以不一致。但是静态泛型方法的泛型类型必须与类的泛型类型不一致,否则,会在编译时报错。(妈呀,这句话好绕口)

类泛型 <Q>会在Tool类创建对象时被赋值,而静态方法的泛型 <W>,会在我们用类名调用静态方法时被赋值。

泛型接口

  • 泛型接口概述

简而言之,泛型接口就是把泛型定义在接口上的接口。

  • 定义格式
public interface 接口名<泛型类型>
  • 自定义泛型接口

实现接口方式1(推荐):

interface Inter<T> {public void show(T t);
}class Demo implements Inter<String> {@Overridepublic void show(String t) {System.out.println(t);}}

我们创建Demo类实现了Inter接口,并制定泛型为 <String>,此时,我们重写的show方法的泛型也应该是<String>,这是因为,Inter接口的show方法的泛型与Inter接口泛型是一致的,而Demo类实现了该接口,就应该遵从这种规则。

实现接口方式2(不推荐):

interface Inter<T> {public void show(T t);
}class Demo<T> implements Inter<T> {     //没有必要在实现接口的时候给自己加泛型@Overridepublic void show(T t) {System.out.println(t);}}

泛型通配符

  • 泛型通配符是啥?

泛型通配符就是 <?>,如果在开发过程中,我们不确定右边接收的泛型类型,则我们可以先将左边的泛型类型用?来代替,这个?代表的就是任意类型,比如:

List<?> list = new ArrayList<String>();
//或
List<?> list = new ArrayList<Integer>();

第三次学JAVA再学不好就吃翔(part83)--泛型类相关推荐

  1. 第三次学JAVA再学不好就吃翔(part107)--字符流的拷贝

    学习笔记,仅供参考,有错必纠 文章目录 IO流 字符流的拷贝 拷贝纯文本文件 注意事项 自定义字符数组的拷贝 IO流 字符流的拷贝 拷贝纯文本文件 zzz.txt: 安徽财经大学 JAVA代码: pa ...

  2. 第三次学JAVA再学不好就吃翔(part106)--字符流

    学习笔记,仅供参考,有错必纠 文章目录 IO流 字符流输入流FileReader 字符流是什么 FileReader类构造方法 举个例子 字符流输出流FileWriter FileWriter构造方法 ...

  3. 第三次学JAVA再学不好就吃翔(part46)--Scanner类

    学习笔记,仅供参考 文章目录 Scanner类 Scanner获取数据出现的问题 Scanner类 概述 Scanner是在java.util包下的一个类,使用该类时我们需要导包.这个类被final修 ...

  4. 第三次学JAVA再学不好就吃翔(part117)--单例设计模式

    学习笔记,仅供参考,有错必纠 文章目录 多线程 单例设计模式 饿汉式 懒汉式 第三种格式 Timer类 线程的五种状态 多线程 单例设计模式 单例设计模式,即保证类在内存中只有一个对象,如何保证类在内 ...

  5. 第三次学JAVA再学不好就吃翔(part109)--LineNumberReader类

    学习笔记,仅供参考,有错必纠 IO流 LineNumberReader类 该类继承自java.io.BufferedReader,该类可以跟踪行号的缓冲字符输入流.此类定义了方法 setLineNum ...

  6. 第三次学JAVA再学不好就吃翔(part108)--带缓冲的字符流

    学习笔记,仅供参考,有错必纠 文章目录 IO流 带缓冲的字符流 BufferedReader和BufferedWriter readLine和newLine方法 IO流 带缓冲的字符流 Buffere ...

  7. 第三次学JAVA再学不好就吃翔(part7)--基础语法之运算符

    学习笔记,仅供参考 文章目录 JAVA基础语法 运算符 算数运算符 算术运算符 ++和-- 赋值运算符 关系运算符 JAVA基础语法 运算符 什么是运算符 就是对常量和变量进行操作的符号. 运算符的分 ...

  8. 第三次学JAVA再学不好就吃翔(part115)--多线程

    学习笔记,仅供参考,有错必纠 文章目录 多线程 多线程引入 什么是线程 多线程并行和并发的区别 Java程序运行原理 多线程的实现方式 多线程实现的方式1 多线程程序实现的方式2 以上两种实现方式的区 ...

  9. 第三次学JAVA再学不好就吃翔(part113)--对象操作流

    学习笔记,仅供参考,有错必纠 对象操作流 对象操作流可以将一个对象写出, 或者读取一个对象到程序中,也就是执行了序列化和反序列化的操作. 举个例子 先构造一个Role类: package com.gu ...

  10. 第三次学JAVA再学不好就吃翔(part104)--flush和close

    学习笔记,仅供参考,有错必纠 flush和close flush方法 对于写出数据来说,当缓冲区满了之后,缓冲区中的数据会自动写出,但是当缓冲区没有满时,调用flush方法,那么缓冲区就会被刷新,数据 ...

最新文章

  1. Linux中常用到的命令
  2. Java空指针异常解决java.lang.NullPointerException解决心得
  3. 单点登录Redis存储Session及SessionId问题说明与集群实战-3
  4. mac安装brew失败怎么办?
  5. <深入剖析Tomcat>摘抄
  6. javascript --- 对象属性的深层次获取
  7. 使用MOM 2005监视DC的磁盘空间
  8. 简单的python画图代码_python opencv如何实现简易画图板 python opencv实现简易画图板代码...
  9. Linux启动syslog进程,linux – 使用systemd启动的进程正在记录到/ var / log / syslog和/var/log/daemon.log...
  10. 进程+协程 计算操作
  11. POI 读取 Excel 文件(2003版本与2007版本的差异之处)
  12. 计算机三级网络技术上机,计算机三级网络技术上机部分(南开100题题库)
  13. mac上好用的压缩_Mac图片压缩工具(早晚用到,建议收藏)
  14. 【论文笔记】SimplE Embedding for Link Prediction in Knowledge Graphs
  15. 未完成:读书笔记01芝加哥大学论文写作指南_Kate L. Turabian
  16. 【OpenCV】PNG图片压缩方法
  17. 大部分人都容易焦虑,那么应该如何对待焦虑呢?
  18. GCSE英语语言考试-语言和结构
  19. 用友U8案例教程库存管理前台操作
  20. Vuetify学习记录(三)-- v-data-table

热门文章

  1. 家用电器用户行为分析与事件识别代码详解+修改后运行无误的代码
  2. WPF,强制捕获鼠标事件,鼠标移出控件外依然可以执行强制捕获的鼠标事件
  3. mysql5.6错误代码
  4. 阿里云ECS服务器磁盘空间异常,或者爆满
  5. AV Linux 2016系统今年发布:影音制作专用
  6. 深入浅出空间索引:2
  7. zabbix-agent客户端安装
  8. 在网页中嵌入flash之标签
  9. 基础向量运算-2D镜面反射
  10. 一本介绍C指针的书--指针和结构体5.1