1. 我们先写一个没有泛型的类Box:

 public class Box {

     private Object obj;

     public Box() {}

     public Object getObj() {
return obj;
} public void setObj(Object obj) {
this.obj = obj;
} public Box(Object obj) {
super();
this.obj = obj;
} }

这时我们可以存入任意类型的数据, 反正他们都是Object的子类, 存入时会自动类型提升. 没有任何检查方法.

我们来将其改为带有泛型的类:

 public class Box<T> {

     private T obj;

     public Box() {}

     public T getObj() {
return obj;
} public void setObj(T obj) {
this.obj = obj;
} public Box(T obj) {
super();
this.obj = obj;
} }

就是这么简单, 只需在类名称的后面加上<T>即可, 在类中使用T来代表泛型指定的数据类型.

2. 这里顺便说一下类型参数的命名规范:
理论上你可以起任何你想要起的名字, 但最好是单个大写字母, 下面是一些约定俗成规范:

  • E - Element (在集合中使用,因为集合中存放的是元素)
  • T - Type(Java 类)
  • K - Key(键)
  • V - Value(值)
  • N - Number(数值类型)
  • S、U、V  - 2nd、3rd、4th types

3. 使用该类的时候, 我们就可以这样写:

 Box<String> b = new Box<>();
b.setObj("aaa");
// b.setObj(11); // 编译报错
String s = b.getObj();

4. 使用多个类型参数:

在我们使用Map时应该已经注意到了, Map使用泛型时需要设定两个类型参数, 如HashMap<String, Integer>. 我们在定义自己的泛型类的时候也可以定义多个类型参数, 如:

 public class Box<T1, T2, T3> {

     private T1 t1;
private T2 t2;
private T3 t3; public Box() {} public Box(T1 t1, T2 t2, T3 t3) {
super();
this.t1 = t1;
this.t2 = t2;
this.t3 = t3;
} public T1 getT1() {
return t1;
} public void setT1(T1 t1) {
this.t1 = t1;
} public T2 getT2() {
return t2;
} public void setT2(T2 t2) {
this.t2 = t2;
} public T3 getT3() {
return t3;
} public void setT3(T3 t3) {
this.t3 = t3;
} }

使用:

 Box<String, Integer, Double> b = new Box<>("aaa", 10, 3.14);
System.out.println(b.getT1());
System.out.println(b.getT2());
System.out.println(b.getT3());

Java泛型学习笔记 - (二)泛型类的更多相关文章

  1. Java IO学习笔记二

    Java IO学习笔记二 流的概念 在程序中所有的数据都是以流的方式进行传输或保存的,程序需要数据的时候要使用输入流读取数据,而当程序需要将一些数据保存起来的时候,就要使用输出流完成. 程序中的输入输 ...

  2. Java IO学习笔记二:DirectByteBuffer与HeapByteBuffer

    作者:Grey 原文地址:Java IO学习笔记二:DirectByteBuffer与HeapByteBuffer ByteBuffer.allocate()与ByteBuffer.allocateD ...

  3. Java泛型学习笔记 - (七)浅析泛型中通配符的使用

    一.基本概念:在学习Java泛型的过程中, 通配符是较难理解的一部分. 主要有以下三类:1. 无边界的通配符(Unbounded Wildcards), 就是<?>, 比如List< ...

  4. java jvm学习笔记二(类装载器的体系结构)

    欢迎装载请说明出处:http://blog.csdn.net/yfqnihao                 在了解java虚拟机的类装载器之前,有一个概念我们是必须先知道的,就是java的沙箱,什 ...

  5. Java泛型学习笔记--Java泛型和C#泛型比较学习(一)

    总结Java的泛型前,先简单的介绍下C#的泛型,通过对比,比较学习Java泛型的目的和设计意图.C#泛型是C#语言2.0和通用语言运行时(CLR)同时支持的一个特性(这一点是导致C#泛型和Java泛型 ...

  6. Java泛型读书笔记 (二)

    关于Java泛型擦除后,继承一个泛型类带来的问题 有如下泛型类Pair: public class Pair<T> { private T second; private T first; ...

  7. Java设计模式学习笔记(二) 简单工厂模式

    前言 本篇是设计模式学习笔记的其中一篇文章,如对其他模式有兴趣,可从该地址查找设计模式学习笔记汇总地址 正文开始... 1. 简介 简单工厂模式不属于GoF23中设计模式之一,但在软件开发中应用也较为 ...

  8. Java泛型学习笔记 - (六)泛型的继承

    在学习继承的时候, 我们已经知道可以将一个子类的对象赋值给其父类的对象, 也就是父类引用指向子类对象, 如: Object obj = new Integer(10); 这其实就是面向对象编程中的is ...

  9. Java泛型学习笔记

    泛型是Java5引进的新特征,是类和接口的一种拓展机制,主要实现参数化类型机制.Java的泛型,跟C++的类模板有很多相似的地方,或者说,就是C++类模板的升级版. 泛型类 在开发过程中,我们或许要设 ...

随机推荐

  1. C语言多文件编译

    fun.c #include <stdio.h> int fun1(){ printf("The first function!\n"); return 0; } in ...

  2. winpcap抓包原理

    winpcap抓包原理 WinPcap 是由伯克利分组捕获库派生而来的分组捕获库,它是在Windows 操作平台上来实现对底层包的截取过滤.WinPcap 是 BPF 模型和 Libpcap 函数库在 ...

  3. Mensa Intellect test

      国际标准智商测试                             (智力测试) 例题: 第一:看似简单的加法乘法数学题,10个人有9个都不会做. 第二:问号处应该填写什么数字?10个人有8 ...

  4. SPSS数据分析—生存分析

    生存分析是对生存时间进行统计分析的一种技术,所谓生存时间,就是指从某一时间点起到所关心的事件发生的这段时间.这里的时间不一定就是钟表日历上的时间,也有可能是其他的度量单位,比如长度单位等. 生存时间有 ...

  5. <input type="file" id="camera" multiple="multiple" capture="camera" accept="image/*"> 上传图片,手机调用相册和摄像头

    <input type="file" id="camera" multiple="multiple" capture="ca ...

  6. mybatis 对于基本类型数据传值的问题

    最近在开发的时候,遇到一个小问题: Caused by: org.apache.ibatis.reflection.ReflectionException: There is no getter fo ...

  7. 【教程】16岁黑客如何把Windows 95装进智能手表?【转】

    来自美国佐治亚州的16岁黑客Corbin Davenport十分喜欢摆弄电子产品,最近他刚到手了一台三星Gear Live,并开始把玩起来.他发现Android Wear作为Android系统的改版并 ...

  8. 关于磁盘错误disk error

    到同事办公室的时候,机器的启动界面就停在磁盘错误disk error上. 首先怀疑的就是硬盘可能坏了,于是就用u盘启动,运行mhdd检测,一直到10%都没有发现错误.于是退出,重启,发现机器能够启动x ...

  9. easyui datagrid 分页

    //初始化dategrid $('#tt').datagrid({ url:null, pagination:true, pageSize:, pageNumber:, rownumbers:true ...

  10. Vue2.X的状态管理vuex记录

    记住上述的顺序情况:想要改变state,只能通过Mutation,虽然action可以直接改变state,这样会使每个状态可以方便的跟踪和记录(用Devtools跟踪) vue Method   -- ...