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(泛型)的更多相关文章

  1. 《徐徐道来话Java》(2):泛型和数组,以及Java是如何实现泛型的

    数组和泛型容器有什么区别 要区分数组和泛型容器的功能,这里先要理解三个概念:协变性(covariance).逆变性(contravariance)和无关性(invariant). 若类A是类B的子类, ...

  2. Python之路,Day16 - Django 进阶

    Python之路,Day16 - Django 进阶   本节内容 自定义template tags 中间件 CRSF 权限管理 分页 Django分页 https://docs.djangoproj ...

  3. Java之路——名词解释(一)

    一.开篇 许多人在初接触Java的时候,都会被各种Java的英文缩写名词给弄得头晕脑胀.看一个技术,内容里又会有一堆其他的技术名词,看了半天不知所云.尝试去查一下这些名词的解释,除了非常学术性的解释之 ...

  4. Java之路——敬JAVA初学者(作者:MoMo)

    作为一名大四的毕业生,大学三年过,有得有失.作为一个喜欢编程,喜欢JAVA的人,自学其实是一件美事,很有意思的事.要是能再找个女朋友一起学.嘿嘿,就不枉在大学走了一遭啊!    要离开学校了,还是想留 ...

  5. Java之路——环境配置与编译运行

    本文大纲 一.开篇 二.JDK下载 三.JDK安装 四.环境配置 五.初识Java编译 六.Java与Javac 七.第一个Java程序 八.总结 九.参考资料 一.开篇 通过对之前Java之路的了解 ...

  6. Java之路 ——初识Eclipse

    零.大纲 一.前言 二.获取Eclipse 三.运行Eclipse 四.创建及运行第一个Java Project 五.界面介绍 六.如何调试 七.获取插件 八.Eclipse 快捷键 九.总结 一.前 ...

  7. JAVA提高六:泛型

    在面向对象编程语言中,多态算是一种泛化机制.例如,你可以将方法的参数类型设置为基类,那么该方法就可以接受从这个基类中导出的任何类作为参数,这样的方法将会更具有通用性.此外,如果将方法参数声明为接口,将 ...

  8. 【原】Java学习笔记027 - 泛型

    package cn.temptation.test; import java.util.ArrayList; import java.util.Iterator; public class Samp ...

  9. Java Collections API和泛型

    Java Collections API和泛型 数据结构和算法 学会一门编程语言,你可以写出一些可以工作的代码用计算机来解决一些问题,然而想要优雅而高效的解决问题,就要学习数据结构和算法了.当然对数据 ...

随机推荐

  1. HTML中html元素的lang属性的说明

    HTML中html元素的lang属性的说明 我在刚开始学习HTML的时候,关于基本的HTML格式中有一点不明白的地方,基本格式如下 <!DOCTYPE html> <html lan ...

  2. 字符串和id的转换方法

    在项目中经常会遇到一个需求就是字符串和id的转换,比如标签和标签id.因为在存储系统里面存储字符串会比较浪费内存,而存储id会节省内存和提高效率. 问题分解 通过字符串获得id 通过id获得字符串 实 ...

  3. MySQL 部署分布式架构 MyCAT (二)

    安装 MyCAT 安装 java 环境(db1) yum install -y java 下载 Mycat-server-1.6.5-release-20180122220033-linux.tar. ...

  4. STL顺序容器的基本操作

    容器主要分为:顺序容器和关联容器 顺序容器和关联容器,顺序容器主要有:vector.list.deque等.其中vector表示一段连续的内存地址,基于数组的实现,list表示非连续的内存,基于链表实 ...

  5. 开源敏捷测试管理& 开源BUG跟踪管理软件itest(爱测试) V3.3.1小改紧急发布及正实现功能预告

    v3.3.1 下载地址 :itest下载 码云源码地址 https://gitee.com/itestwork/itest 开源中国  itest项目地址   https://www.oschina. ...

  6. SpringCloud学习笔记(四、SpringCloud Netflix Ribbon)

    目录: Ribbon简介 Ribbon的应用 RestTemplate简介 Ribbon负载均衡源码分析 Ribbon简介: 1.负载均衡是什么 负载均衡,根据其字面意思来说就是让集群服务具有共同完成 ...

  7. 巡风扫描器web界面工作流程

    这两周学习了巡风扫描器的搭建,也在学长的带领下看了各部分的下源代码,为了加深记忆,梳理一下巡风大体的工作流程,主要通过web端的页面分析,错误的地方还请大佬们多多指正. 整体看一下巡风的扫描流程:登陆 ...

  8. python3.5.3rc1学习八:文件打包

    from cx_Freeze import setup, Executable setup(name='test to exe', version = '0.1', description='test ...

  9. jieba、NLTK学习笔记

    中文分词 - jiebaimport re import jieba news_CN = ''' 央视315晚会曝光湖北省知名的神丹牌.莲田牌“土鸡蛋”实为普通鸡蛋冒充,同时在商标上玩猫腻, 分别注册 ...

  10. oracle表连接的优化

    多表连接的三种方式: HASH JOIN,MERGE JOIN,NESTED LOOP NESTED LOOP: 嵌套循环连接,适用于内表数据量较小时.外表返回的每一行都要在内表中检索找到与它匹配的行 ...