一、<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. light oj -1245 - Harmonic Number (II)

    先举个例子,假如给你的数是100的话,将100/2=50;是不是就是100除100-51之间的数取整为1: 100/3=33;100除50到34之间的数为2,那么这样下去到sqrt(100);就可以求 ...

  2. 七、Uniapp+vue+腾讯IM+腾讯音视频开发仿微信的IM聊天APP,支持各类消息收发,音视频通话,附vue实现源码(已开源)-聊天消息项的实现

    会话好友列表的实现 1.项目引言 2.腾讯云后台配置TXIM 3.配置项目并实现IM登录 4.会话好友列表的实现 5.聊天输入框的实现 6.聊天界面容器的实现 7.聊天消息项的实现 8.聊天输入框扩展 ...

  3. Propensity Scores

    目录 基本的概念 重要的结果 应用 Propensity Score Matching Stratification on the Propensity Score Inverse Probabili ...

  4. 编写Java程序_输入三个整数x,y,z,请把这三个数由小到大输出,请写出实现代码。(3种方法)

    要求说明: 输入三个整数x,y,z,请把这三个数由小到大输出. 实现代码: 第1种方法: import java.util.Scanner; public class xyzMaxMin{ publi ...

  5. Java高级程序设计笔记 • 【第5章 XML解析】

    全部章节   >>>> 本章目录 5.1 XML 文档概述 5.1.1 XML文档结构 5.1.1 XML结构说明 5.1.1 XML文档元素 5.1.2 XML文档语法规范 ...

  6. windows环境下elasticsearch安装教程(超详细)

    一.安装jdk ElasticSearch是基于lucence开发的,也就是运行需要java jdk支持.所以要先安装JAVA环境. 由于ElasticSearch 5.x 往后依赖于JDK 1.8的 ...

  7. Shell自动上传下载文件到SFTP服务器

    1.说明 本文提供一个Shell脚本, 可以自动连接到SFTP服务器, 然后上传或者下载指定的文件, 进而可以使用Linux的corntab命令, 定时执行脚本上传下载文件, 实现文件的同步或者备份功 ...

  8. Swoole 进程管理模块 Process 之单进程的使用

    PHP 自带的 pcntl,存在很多不足,如: 没有提供进程间通信的功能: 不支持重定向标准输入和输出: 只提供了 fork 这样原始的接口,容易使用错误: Swoole\Process 提供了如下特 ...

  9. 【计项02组01号】Java版图形界面计算器

    Java版图形界面计算器1.0版本 项目分析[1.0] 组成部分 代码结构 (1)窗口的创建 在<JDK 核心 API>中我们提到,创建一个窗口需要使用 JFrame 类.在本实验中,我们 ...

  10. SQL server - if else 与 else if 的正确使用

    两层判断 if a>2 begin print 'a大于2' end else begin print 'a小于等于2' end 注意了  begin - end 之间的代码块不允许空,必须有指 ...