一、<R>  ( R  r ) 默认object  可以存所有类型。   R 这个是随便定义的大写字母,前后要保持一致性!

package com.aaa.test;
/*
* 演示 泛型方法 对方法的修饰哦
* 作用 提高代码的重用性 减少了重载方法的使用
* 实列
*
*/ import static org.junit.Assert.*; import org.junit.Test; import com.aaa.entity.People;
import com.aaa.entity.User; public class Demo03 {
//在run01 方法前 定义了一个<W> 参数列表是(W w)
// W 的默认类型是object 就是可以放各种类型的值
public <W>void run01(W w) {
System.out.println("run01方法在执行 w的值:"+w);
} public<R> void run02(R r) {
System.out.println("体验泛型的强大和快捷----"+r);
} public static void main(String[] args) {
Demo03 d = new Demo03(); //写入的值就是 w 的值 写入的是一个对象 w 就等于这个对象。
d.run01("哈哈");
d.run01(456);
d.run01('c'); User u = new User(2,"马飞飞");
d.run01(u); } @Test
public void testName() throws Exception {
Demo03 d = new Demo03();
d.run02("泛型默认是object类型 可以放各种类型的数据");
d.run02(666); }
@Test
public void test01() throws Exception {
//已经知道泛型 默认是object 对象 那么是否可以将我所定义的实体类 放在里面使用呢?
Demo03 d = new Demo03(); //在user中定义了 id 和name
User u = new User(1,"卢本伟牛逼!");
d.run01(u); //为什么会显示 demofanxing ? 就是在user 实体类中tostring中 返回的对象就是user 此时w 的值就是user这个对象。 People p = new People(2,"sadf");
d.run01(p); //w 的值 }
}

二、定义多个泛型

package com.aaa.test;

import static org.junit.Assert.*;

import org.junit.Test;

import com.aaa.entity.User;

/*
* 演示 在泛型中一次 定义多个
* 定义多个参数时 中间用逗号隔开。
*
* 同理,这里定义的泛型 默认值也是object
*
*/
public class Demo06 {
public <S, B> void test01(S s ,B b) {
System.out.println("定义的s的值是:"+s+"----定义的b的值是:"+b);
}
public static void main(String[] args) {
Demo06 d= new Demo06(); d.test01("你好", "我是枫旭");
d.test01(66, 999); }
@Test
public void testName() throws Exception {
Demo06 d = new Demo06();
//引入对象
User u1 = new User(1,"泛型");
User u2 = new User(1,"定义两个"); d.test01(u1, u2); d.test01(u1, "混着用");
}
}

三、通配符的参数约束。

package com.aaa.test;

import java.util.ArrayList;
import java.util.List; import com.aaa.entity.User; /*
* 演示 泛型中的通配符。
* list<?> lists 在list中定义的是?
*
* 下面在list中想定义什么引用数据类型 就定义啥、
* 当list中的数据类型被定义之后,后面的就固定了。
*
*/
public class Demo07 { public void test01(List<?> list) {
System.out.println("输出list01集合的长度----"+list.size());
}
public static void main(String[] args) {
Demo07 d = new Demo07(); //新建一个list集合 给通配符 定义引用数据类型
// 将之前的user放在这里。
List<User>list01=new ArrayList<>(); //user放入值
User u = new User(1,"哈哈");
User u2 = new User(2,"嘻嘻");
//添加到list集合中
list01.add(u); list01.add(u2); d.test01(list01); //便利list01集合中的数据
for (User user : list01) {
System.out.println(user);
}
}
}

package com.aaa.test;

import java.util.HashMap;
import java.util.Map; public class Demo08 {
public void test01(Map<?, ?>map) {
System.out.println("map的长度---"+map.size());
} public static void main(String[] args) {
Demo08 d = new Demo08(); //给通配符定义数据类型 integer, string
Map<Integer, String>map01=new HashMap<>(); //这边就只能按照 integer 和string 的类型 来添加数据。
map01.put(1, "lubenwei");
map01.put(2, "马飞飞"); System.out.println(map01); } }

四、通配符参数约束:?  extends 类  包含该自身及其子类的所有对象类型

package com.aaa.test;

import static org.junit.Assert.*;

import java.util.ArrayList;
import java.util.List; import com.aaa.entity.People;
import com.aaa.entity.User;
import com.aaa.entity.ZiUser; /*
* 通配符 参数约束
* ? extends User 此时 user的子类 ziUser 就可以使用。
* ?super User 同理 user的父类 people 就可以使用。
*
* ?extends E 当前类的和他的父类 所有的对象都可以使用。
*
*子类 父类
*
*/
public class Demo09 <E>{ public void test01(List<? extends User>list) {
System.out.println("extends 包含该类和他的子类的所有对象类型"+list);
} // people的子类 是user 用super之后 user对象也能使用。
public void test02(List<? super User>list) {
System.out.println("super 包含该类和他的父类的所有对象类型"+list);
} public void test03(List<? extends E>list) {
System.out.println(" ? extends E 包含该类和他的父类的所有对象类型"+list);
}
public static void main(String[] args) { Demo09<Object> d = new Demo09<>(); //user的子类是ziUser 因为 extends 所以这里可以使用!
List<ZiUser>list0101=new ArrayList<>();
List<User>list01=new ArrayList<>(); //添加数据
User u1 = new User(5,"嘻嘻");
list0101.add(new ZiUser(2,"你好")); // index user
list01.add(0,u1); d.test01(list0101);
d.test01(list01); System.out.println("---------------------");
//把user的父类people放进去
List<People>list02=new ArrayList<>();
List<User>list0201=new ArrayList<>();
list0201.add(new User(2,"用super之后,user的父类 people也可以使用"));
list02.add(new People(5,"类people"));
d.test02(list02);
d.test02(list0201); } }

java中的泛型,简单介绍。 修饰方法的用法的更多相关文章

  1. java中数据流的简单介绍

    java中的I/O操作主要是基于数据流进行操作的,数据流表示了字符或者字节的流动序列. java.io是数据流操作的主要软件包 java.nio是对块传输进行的支持 数据流基本概念 “流是磁盘或其它外 ...

  2. Java中NIO的简单介绍

    NIO基本介绍 Java NIO(New IO) 也有人称之为Java non-blocking IO 是从Java1.4版本开始引入的一个新的IO API,可以代替标准的IO API.NIO与原来的 ...

  3. java 中的多线程简单介绍

    package com.zxf.demo; /* * 多线程的实现方式两种? * 一..实现 runnable 接口 * 2.重写run方法 Run():当一个线程启动后,就会自动执行该方法 * 3. ...

  4. java中的泛型1

    1.泛型概述 泛型,即“参数化类型”.一提到参数,最熟悉的就是定义方法时有形参,然后调用此方法时传递实参.那么参数化类型怎么理解呢?顾名思义,就是将类型由原来的具体的类型参数化,类似于方法中的变量参数 ...

  5. Java中的泛型 (上) - 基本概念和原理

    本节我们主要来介绍泛型的基本概念和原理 后续章节我们会介绍各种容器类,容器类可以说是日常程序开发中天天用到的,没有容器类,难以想象能开发什么真正有用的程序.而容器类是基于泛型的,不理解泛型,我们就难以 ...

  6. 【Java入门提高篇】Day14 Java中的泛型初探

    泛型是一个很有意思也很重要的概念,本篇将简单介绍Java中的泛型特性,主要从以下角度讲解: 1.什么是泛型. 2.如何使用泛型. 3.泛型的好处. 1.什么是泛型? 泛型,字面意思便是参数化类型,平时 ...

  7. java中的泛型2--注意的一些问题和面试题

    前言 这里总结一下泛型中需要注意的一些地方和面试题,通过面试题可以让你掌握的更清楚一些. 泛型相关问题 1.泛型类型引用传递问题 在Java中,像下面形式的引用传递是不允许的: ArrayList&l ...

  8. 夯实Java基础系列13:深入理解Java中的泛型

    目录 泛型概述 一个栗子 特性 泛型的使用方式 泛型类 泛型接口 泛型通配符 泛型方法 泛型方法的基本用法 类中的泛型方法 泛型方法与可变参数 静态方法与泛型 泛型方法总结 泛型上下边界 泛型常见面试 ...

  9. Java中的泛型 - 细节篇

    前言 大家好啊,我是汤圆,今天给大家带来的是<Java中的泛型 - 细节篇>,希望对大家有帮助,谢谢 细心的观众朋友们可能发现了,现在的标题不再是入门篇,而是各种详细篇,细节篇: 是因为之 ...

  10. [JavaCore]JAVA中的泛型

    JAVA中的泛型 [更新总结] 泛型就是定义在类里面的一个类型,这个类型在编写类的时候是不确定的,而在初始化对象时,必须确定该类型:这个类型可以在一个在里定义多个:在一旦使用某种类型,在类方法中,那么 ...

随机推荐

  1. 晴天小猪历险记之Hill(Dijkstra优先队列优化)

    描述 这一天,他来到了一座深山的山脚下,因为只有这座深山中的一位隐者才知道这种药草的所在.但是上山的路错综复杂,由于小小猪的病情,晴天小猪想找一条需时最少的路到达山顶,但现在它一头雾水,所以向你求助. ...

  2. 前端项目 node8升级到node16,代码升级汇总

    背景 公司的项目是vue项目,环境是node@8x版本的,最近我创建react hook的项目,发现至少需要node14才支持,打开官网才发现node都已经到16版本了.失策啊,失策.于是直接升级到最 ...

  3. 【Netty技术专题】「原理分析系列」Netty强大特性之ByteBuf零拷贝技术原理分析

    零拷贝Zero-Copy 我们先来看下它的定义: "Zero-copy" describes computer operations in which the CPU does n ...

  4. 【机器学习】Pandas库练习-获取yahoo金融苹果公司的股票数据

    # 获取yahoo金融苹果公司的股票数据. # 1.分析拉取的数据,找到收盘数据列的列名. # 2.绘制收盘价格柱状图. # 3.分析拉取的数据涨跌率,股价移动平均和波动率. # 4. 找出开盘价和收 ...

  5. What is being transferred in transfer learning?

    目录 概 主要内容 feature reuse mistakes and feature similarity loss landscape module criticality pre-traine ...

  6. Java初学者作业——编写 Java 程序,用户输入 3 个操作数,分别求出最大值、最小值和平均值。

    返回本章节 返回作业目录 需求说明: 编写 Java 程序,用户输入 3 个操作数,分别求出最大值.最小值和平均值. 实现思路: 定义 Java 类,定义 3 个方法,用来求 3 个数字的最大值.最小 ...

  7. 编写Java程序,实现从控制台输入对应个数的整数,输出对输入整数的从大到小显示

    编写Java程序,实现从控制台输入对应个数的整数,输出对输入整数的从大到小显示 效果如下: 实现代码: import java.util.Arrays; import java.util.Scanne ...

  8. Hbase单点安装Version1.1.5

    Hbase单点安装,基于版本1.1.5, 使用hbase-1.1.5.tar.gz安装包. 1.安装说明 使用Hbase自带zookeeper和本地文件目录存储数据 2.安装规划 角色规划 IP/机器 ...

  9. 『无为则无心』Python函数 — 31、命名空间(namespace)

    目录 1.什么是命名空间 2.三种命名空间 3.命名空间查找顺序 4.命名空间的生命周期 5.如何获取当前的命名空间 1.什么是命名空间 命名空间指的是变量存储的位置,每一个变量都需要存储到指定的命名 ...

  10. 《MySQL5.7从入门到精通》(高清).PDF,免费无需任何解压密码

    链接:https://pan.baidu.com/s/1nnm5IbExaBhjL6-7qR1Oxw 提取码:vzpx