Java之路---Day16(泛型)
2019-11-02-23:25:26
目录
1.泛型的概念:
2.泛型的定义和使用:
2.1定义和使用含有泛型的类:
2.2定义和使用含有泛型的方法:
2.3定义和使用含有泛型的接口:
泛型的概念:
泛型是一种未知的数据类型,当我门不知道使用什么数据类型的时候,可以使用泛型,泛型也可以看成是一个变量,用来接受数据类型
E e:Element 元素
T t:Type 类型
泛型的定义和使用:
我们在集合中会大量使用到泛型,用来灵活地将数据类型应用到不同的类、方法、接口当中,将数据类型作为参数进行传递
定义和使用含有泛型的类:
修饰符 class 类名<代表泛型的变量>{ }
package demosummary.generic; public class GenericClass<E> {
private E name; public GenericClass() {
} public GenericClass(E name) {
this.name = name;
} public E getName() {
return name;
} public void setName(E name) {
this.name = name;
} @Override
public String toString() {
return "GenericClass{" +
"name=" + name +
'}';
}
}
package demosummary.generic; public class GenericClassTest {
public static void main(String[] args) {
//不写泛型则默认为Object类
GenericClass gc = new GenericClass();
gc.setName("默认为Object类");
Object obj = gc.getName();
System.out.println(obj); //使用泛型为Integer类
GenericClass<Integer> gci = new GenericClass<>();
gci.setName(1);
Integer integer = gci.getName();
System.out.println(integer);
}
}
定义和使用含有泛型的方法:
格式:修饰符<泛型> 返回值类型 方法名(参数列表(使用泛型)){
语句体;
}
注意:含有泛型的方法,在调用方法的时候确定泛型的数据类型,传递什么类型的参数,泛型就是什么类型
package demosummary.generic; public class GenericMethod {
//定义一个含有泛型的方法
public <E> void method(E e){
System.out.println(e);
} //定义一个含有泛型的静态方法
public static <M> void method01(M m){
System.out.println(m);
}
}
package demosummary.generic; public class GenericMethodTest {
public static void main(String[] args) {
//创建一个GenericMethod对象
GenericMethod gm = new GenericMethod();
gm.method(1);//传入Integer类型
gm.method("字符串");//传入String类型
gm.method(1.1);//传入Float类型
gm.method(true);//传入Boolean类型 //静态方法建议通过类名调用
GenericMethod.method01(2);//传入Integer类型
GenericMethod.method01("静态方法");//传入String类型
}
}
定义和使用含有泛型的接口:
格式:
修饰符 interface接口名<代表泛型的变量>{ }
第一种使用方式:
定义接口的实现类,实现接口,指定接口的泛型
第二种使用方式:
接口使用什么泛型,实现类就使用什么泛型,类跟着接口走
package demosummary.generic;
//定义一个抽象类
public interface GenericInterface<E> {
//创建一个抽象方法
public void method(E e);
}
package demosummary.generic; public class GenericInterface01 implements GenericInterface<String>{
//重写抽象方法
@Override
public void method(String s) {
System.out.println(s);
}
}
package demosummary.generic; public class GenericInterface02<E> implements GenericInterface<E>{
//重写抽象类中的抽象方法
@Override
public void method(E e) {
System.out.println(e);
}
}
package demosummary.generic; public class GenericInterfaceTest {
public static void main(String[] args) {
//创建一个GenericInterface01对象,指定实现类泛型为String类型
GenericInterface01 gi01 = new GenericInterface01();
gi01.method("泛型指定为字符串"); //创建一个GenericInterface02对象,接口泛型为Integer类型,实现类也为Integer类型
GenericInterface02<Integer> gi02 = new GenericInterface02<>();
gi02.method(2); //创建一个GenericInterface02对象,接口泛型为String类型,实现类也为String类型
GenericInterface02<String> gi021 = new GenericInterface02<>();
gi021.method("接口为什么泛型,实现类就是什么泛型");
}
}
Java之路---Day16(泛型)的更多相关文章
- 《徐徐道来话Java》(2):泛型和数组,以及Java是如何实现泛型的
数组和泛型容器有什么区别 要区分数组和泛型容器的功能,这里先要理解三个概念:协变性(covariance).逆变性(contravariance)和无关性(invariant). 若类A是类B的子类, ...
- Python之路,Day16 - Django 进阶
Python之路,Day16 - Django 进阶 本节内容 自定义template tags 中间件 CRSF 权限管理 分页 Django分页 https://docs.djangoproj ...
- Java之路——名词解释(一)
一.开篇 许多人在初接触Java的时候,都会被各种Java的英文缩写名词给弄得头晕脑胀.看一个技术,内容里又会有一堆其他的技术名词,看了半天不知所云.尝试去查一下这些名词的解释,除了非常学术性的解释之 ...
- Java之路——敬JAVA初学者(作者:MoMo)
作为一名大四的毕业生,大学三年过,有得有失.作为一个喜欢编程,喜欢JAVA的人,自学其实是一件美事,很有意思的事.要是能再找个女朋友一起学.嘿嘿,就不枉在大学走了一遭啊! 要离开学校了,还是想留 ...
- Java之路——环境配置与编译运行
本文大纲 一.开篇 二.JDK下载 三.JDK安装 四.环境配置 五.初识Java编译 六.Java与Javac 七.第一个Java程序 八.总结 九.参考资料 一.开篇 通过对之前Java之路的了解 ...
- Java之路 ——初识Eclipse
零.大纲 一.前言 二.获取Eclipse 三.运行Eclipse 四.创建及运行第一个Java Project 五.界面介绍 六.如何调试 七.获取插件 八.Eclipse 快捷键 九.总结 一.前 ...
- JAVA提高六:泛型
在面向对象编程语言中,多态算是一种泛化机制.例如,你可以将方法的参数类型设置为基类,那么该方法就可以接受从这个基类中导出的任何类作为参数,这样的方法将会更具有通用性.此外,如果将方法参数声明为接口,将 ...
- 【原】Java学习笔记027 - 泛型
package cn.temptation.test; import java.util.ArrayList; import java.util.Iterator; public class Samp ...
- Java Collections API和泛型
Java Collections API和泛型 数据结构和算法 学会一门编程语言,你可以写出一些可以工作的代码用计算机来解决一些问题,然而想要优雅而高效的解决问题,就要学习数据结构和算法了.当然对数据 ...
随机推荐
- HTML中html元素的lang属性的说明
HTML中html元素的lang属性的说明 我在刚开始学习HTML的时候,关于基本的HTML格式中有一点不明白的地方,基本格式如下 <!DOCTYPE html> <html lan ...
- 字符串和id的转换方法
在项目中经常会遇到一个需求就是字符串和id的转换,比如标签和标签id.因为在存储系统里面存储字符串会比较浪费内存,而存储id会节省内存和提高效率. 问题分解 通过字符串获得id 通过id获得字符串 实 ...
- MySQL 部署分布式架构 MyCAT (二)
安装 MyCAT 安装 java 环境(db1) yum install -y java 下载 Mycat-server-1.6.5-release-20180122220033-linux.tar. ...
- STL顺序容器的基本操作
容器主要分为:顺序容器和关联容器 顺序容器和关联容器,顺序容器主要有:vector.list.deque等.其中vector表示一段连续的内存地址,基于数组的实现,list表示非连续的内存,基于链表实 ...
- 开源敏捷测试管理& 开源BUG跟踪管理软件itest(爱测试) V3.3.1小改紧急发布及正实现功能预告
v3.3.1 下载地址 :itest下载 码云源码地址 https://gitee.com/itestwork/itest 开源中国 itest项目地址 https://www.oschina. ...
- SpringCloud学习笔记(四、SpringCloud Netflix Ribbon)
目录: Ribbon简介 Ribbon的应用 RestTemplate简介 Ribbon负载均衡源码分析 Ribbon简介: 1.负载均衡是什么 负载均衡,根据其字面意思来说就是让集群服务具有共同完成 ...
- 巡风扫描器web界面工作流程
这两周学习了巡风扫描器的搭建,也在学长的带领下看了各部分的下源代码,为了加深记忆,梳理一下巡风大体的工作流程,主要通过web端的页面分析,错误的地方还请大佬们多多指正. 整体看一下巡风的扫描流程:登陆 ...
- python3.5.3rc1学习八:文件打包
from cx_Freeze import setup, Executable setup(name='test to exe', version = '0.1', description='test ...
- jieba、NLTK学习笔记
中文分词 - jiebaimport re import jieba news_CN = ''' 央视315晚会曝光湖北省知名的神丹牌.莲田牌“土鸡蛋”实为普通鸡蛋冒充,同时在商标上玩猫腻, 分别注册 ...
- oracle表连接的优化
多表连接的三种方式: HASH JOIN,MERGE JOIN,NESTED LOOP NESTED LOOP: 嵌套循环连接,适用于内表数据量较小时.外表返回的每一行都要在内表中检索找到与它匹配的行 ...