一、<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. Nginx 的五大应用场景

    一.HTTP服务器 Nginx本身也是一个静态资源的服务器,当只有静态资源的时候,就可以使用Nginx来做服务器,如果一个网站只是静态页面的话,那么就可以通过这种方式来实现部署. 1.在文档根目录Do ...

  2. 第三十三个知识点:Bellcore攻击是如何攻击使用CRT的RSA的?

    第三十三个知识点:Bellcore攻击是如何攻击使用CRT的RSA的? 注意:这篇博客是由follow论密码计算中消除错误的重要性(On the importance of Eliminating E ...

  3. c#16进制转浮点数单精度类型

    c#16进制转浮点数单精度类型: string s = "4144147B"; MatchCollection matches = Regex.Matches(s, @" ...

  4. 执行jar包指定main

    java包中多个main,需要指定执行java -cp iot-device-sdk-java-0.0.5-SNAPSHOT.jar com.inspur.iot.client.sample.paho ...

  5. Nginx入门--从核心配置与动静分离开始

    写在前面 优化我们项目,服务器部署,不仅仅可以是分布式,Nginx一样可以通过动静分离,负载均衡来减轻我们服务器的压力.Nginx的知识链,学习周期相对比较长,博主也是刚刚入门,这篇就先从实现基础的动 ...

  6. 抛弃go-micro,使用极简微服务框架Bull

    简介 Bull是一款基于GO语言的极简微服务框架. 使用GRPC作为RPC协议,使用ETCD作为注册中心. 框架目前已经实现了服务注册.服务发现(客户端轮训)功能. 整体架构 代码地址 https:/ ...

  7. Rainbond 对接 Istio 原理讲解和代码实现分析

    一.背景 现有的 ServiceMesh 框架有很多,如 Istio.linkerd等.对于用户而言,在测试环境下,需要达到的效果是快.开箱即用.但在生产环境下,可能又有熔断.延时注入等需求.那么单一 ...

  8. python 使用exec执行定义好的方法,提示“name 'XXX' is not defined”

    文件A中的exec(),调到了文件B中的方法,提示name is not defined exec()调用时,提示方法没有定义 试过了的方法: 1.百度上说是局部变量或者是全局变量之间的文件,然后在e ...

  9. Selenium_获取浏览器名称和版本(5)

    from selenium import webdriver driver = webdriver.Chrome() driver.maximize_window() driver.get(" ...

  10. spring security 在controller层 方法级别使用注解 @PreAuthorize("hasRole('ROLE_xxx')")设置权限拦截 ,无权限则返回403

    1.前言 以前学习的时候使用权限的拦截,一般都是对路径进行拦截 ,要么用拦截器设置拦截信息,要么是在配置文件内设置拦截信息, spring security 支持使用注解的形式 ,写在方法和接口上拦截 ...