java中的泛型,简单介绍。 修饰方法的用法
一、<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中的泛型,简单介绍。 修饰方法的用法的更多相关文章
- java中数据流的简单介绍
java中的I/O操作主要是基于数据流进行操作的,数据流表示了字符或者字节的流动序列. java.io是数据流操作的主要软件包 java.nio是对块传输进行的支持 数据流基本概念 “流是磁盘或其它外 ...
- Java中NIO的简单介绍
NIO基本介绍 Java NIO(New IO) 也有人称之为Java non-blocking IO 是从Java1.4版本开始引入的一个新的IO API,可以代替标准的IO API.NIO与原来的 ...
- java 中的多线程简单介绍
package com.zxf.demo; /* * 多线程的实现方式两种? * 一..实现 runnable 接口 * 2.重写run方法 Run():当一个线程启动后,就会自动执行该方法 * 3. ...
- java中的泛型1
1.泛型概述 泛型,即“参数化类型”.一提到参数,最熟悉的就是定义方法时有形参,然后调用此方法时传递实参.那么参数化类型怎么理解呢?顾名思义,就是将类型由原来的具体的类型参数化,类似于方法中的变量参数 ...
- Java中的泛型 (上) - 基本概念和原理
本节我们主要来介绍泛型的基本概念和原理 后续章节我们会介绍各种容器类,容器类可以说是日常程序开发中天天用到的,没有容器类,难以想象能开发什么真正有用的程序.而容器类是基于泛型的,不理解泛型,我们就难以 ...
- 【Java入门提高篇】Day14 Java中的泛型初探
泛型是一个很有意思也很重要的概念,本篇将简单介绍Java中的泛型特性,主要从以下角度讲解: 1.什么是泛型. 2.如何使用泛型. 3.泛型的好处. 1.什么是泛型? 泛型,字面意思便是参数化类型,平时 ...
- java中的泛型2--注意的一些问题和面试题
前言 这里总结一下泛型中需要注意的一些地方和面试题,通过面试题可以让你掌握的更清楚一些. 泛型相关问题 1.泛型类型引用传递问题 在Java中,像下面形式的引用传递是不允许的: ArrayList&l ...
- 夯实Java基础系列13:深入理解Java中的泛型
目录 泛型概述 一个栗子 特性 泛型的使用方式 泛型类 泛型接口 泛型通配符 泛型方法 泛型方法的基本用法 类中的泛型方法 泛型方法与可变参数 静态方法与泛型 泛型方法总结 泛型上下边界 泛型常见面试 ...
- Java中的泛型 - 细节篇
前言 大家好啊,我是汤圆,今天给大家带来的是<Java中的泛型 - 细节篇>,希望对大家有帮助,谢谢 细心的观众朋友们可能发现了,现在的标题不再是入门篇,而是各种详细篇,细节篇: 是因为之 ...
- [JavaCore]JAVA中的泛型
JAVA中的泛型 [更新总结] 泛型就是定义在类里面的一个类型,这个类型在编写类的时候是不确定的,而在初始化对象时,必须确定该类型:这个类型可以在一个在里定义多个:在一旦使用某种类型,在类方法中,那么 ...
随机推荐
- 【剑指Offer】数组中只出现一次的数字 解题报告(Python)
[剑指Offer]数组中只出现一次的数字 解题报告(Python) 标签(空格分隔): 剑指Offer 题目地址:https://www.nowcoder.com/ta/coding-intervie ...
- Leapin' Lizards(hdu 2732)
Leapin' Lizards Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)T ...
- A ROBUST KERNEL PCA ALGORITHM
目录 引 主要内容 问题一 问题二 Lu C, Zhang T, Du X, et al. A robust kernel PCA algorithm[C]. international confer ...
- <学习opencv>图像、视频和数据文件
/*=========================================================================*/ // openCV中的函数 /*====== ...
- Spring企业级程序设计作业目录(作业笔记)
Spring企业级程序设计 • [目录] 第1章 Spring之旅 >>> 1.1.6 使用Eclipse搭建的Spring开发环境,使用set注入方式为Bean对象注入属性值并打 ...
- Java Web程序设计笔记 • 【第7章 会话跟踪技术】
全部章节 >>>> 本章目录 7.1 会话跟踪技术概述 7.1.1 为什么需要会话跟踪 7.1.2 会话的状态和跟踪 7.1.3 会话跟踪技术 7.1.4 会话跟踪工作流程 ...
- .net core中Grpc使用报错:The remote certificate is invalid according to the validation procedure.
因为Grpc采用HTTP/2作为通信协议,默认采用LTS/SSL加密方式传输,比如使用.net core启动一个服务端(被调用方)时: public static IHostBuilder Creat ...
- Swoole 进程管理模块 Process 之单进程的使用
PHP 自带的 pcntl,存在很多不足,如: 没有提供进程间通信的功能: 不支持重定向标准输入和输出: 只提供了 fork 这样原始的接口,容易使用错误: Swoole\Process 提供了如下特 ...
- 初识python 之 爬虫:正则表达式
python中正则表达式功能由 re 模块提供: import re 两个主要函数: match 匹配第一个字符(从第一个字符开始匹配) search 匹配整个字符串 一.匹配单个字符 1.匹配某个 ...
- Selenium_使用execute_script执行JavaScript(11)
selenium的包含的方法已能完全满足UI自动化,但是有些时候又不得不用到执行JS的情况,比如在一个富文本框中输入1W个字,使用send_keys方法将经历漫长的输入过程,如果换成使用JS的inne ...