Java泛型学习笔记 - (二)泛型类
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泛型学习笔记 - (二)泛型类的更多相关文章
- Java IO学习笔记二
Java IO学习笔记二 流的概念 在程序中所有的数据都是以流的方式进行传输或保存的,程序需要数据的时候要使用输入流读取数据,而当程序需要将一些数据保存起来的时候,就要使用输出流完成. 程序中的输入输 ...
- Java IO学习笔记二:DirectByteBuffer与HeapByteBuffer
作者:Grey 原文地址:Java IO学习笔记二:DirectByteBuffer与HeapByteBuffer ByteBuffer.allocate()与ByteBuffer.allocateD ...
- Java泛型学习笔记 - (七)浅析泛型中通配符的使用
一.基本概念:在学习Java泛型的过程中, 通配符是较难理解的一部分. 主要有以下三类:1. 无边界的通配符(Unbounded Wildcards), 就是<?>, 比如List< ...
- java jvm学习笔记二(类装载器的体系结构)
欢迎装载请说明出处:http://blog.csdn.net/yfqnihao 在了解java虚拟机的类装载器之前,有一个概念我们是必须先知道的,就是java的沙箱,什 ...
- Java泛型学习笔记--Java泛型和C#泛型比较学习(一)
总结Java的泛型前,先简单的介绍下C#的泛型,通过对比,比较学习Java泛型的目的和设计意图.C#泛型是C#语言2.0和通用语言运行时(CLR)同时支持的一个特性(这一点是导致C#泛型和Java泛型 ...
- Java泛型读书笔记 (二)
关于Java泛型擦除后,继承一个泛型类带来的问题 有如下泛型类Pair: public class Pair<T> { private T second; private T first; ...
- Java设计模式学习笔记(二) 简单工厂模式
前言 本篇是设计模式学习笔记的其中一篇文章,如对其他模式有兴趣,可从该地址查找设计模式学习笔记汇总地址 正文开始... 1. 简介 简单工厂模式不属于GoF23中设计模式之一,但在软件开发中应用也较为 ...
- Java泛型学习笔记 - (六)泛型的继承
在学习继承的时候, 我们已经知道可以将一个子类的对象赋值给其父类的对象, 也就是父类引用指向子类对象, 如: Object obj = new Integer(10); 这其实就是面向对象编程中的is ...
- Java泛型学习笔记
泛型是Java5引进的新特征,是类和接口的一种拓展机制,主要实现参数化类型机制.Java的泛型,跟C++的类模板有很多相似的地方,或者说,就是C++类模板的升级版. 泛型类 在开发过程中,我们或许要设 ...
随机推荐
- Nginx基础知识之————RTMP模块专题(实践文档)
on_publish 语法:on_publish url上下文:rtmp, server, application描述:这个可以设置为一个API接口(GET方式接受所有参数),会给这个API接口返回8 ...
- ThinkPHP开启事物
$m=D('YourModel');//或者是M(); $m2=D('YouModel2'); $m->startTrans();//在第一个模型里启用就可以了,或者第二个也行 $result= ...
- Python_Day5_迭代器、装饰器、软件开发规范
本节内容 迭代器&生成器 装饰器 Json & pickle 数据序列化 软件目录结构规范 1.列表生成式,迭代器&生成器 列表生成 >>> a = [i+1 ...
- xml报文解析和组装
package com.xjts.cipher.util;import java.io.File;import java.io.FileWriter;import java.io.IOExceptio ...
- 兼容cookie和webStorage
html页面 <!DOCTYPE html> <html lang="en"> <head> <meta charset= ...
- linux主要的发行版及其区别和联系
1. 主要发行版 linux主要发行版有3类: (1).Debian (2).Slackware (3).Redhat (1)Debian Ubuntu 针对桌面和服务器 knopix 以安全著称 ( ...
- CSS的一些小技巧
1.黑白图像img.desaturate { filter: grayscale(100%); -webkit-filter: grayscale(100%); -moz-filter: graysc ...
- js--内容判断(依赖于jq)
/** * 判断是否为空 * @param {Object} $element */ function nullVerify($element) { if(!$element.val() && ...
- pip常见操作收录
由于这些东西比较容易忘掉,在这里几下吧 1. pip 对应用进行安装: sudo pip install your_app 2. pip 对应用进行update sudo pip install ...
- Unity3D 中的协程
若干文章: 1.Coroutine,你究竟干了什么? 2.Radical Coroutines 3.Extended Unity Coroutines