泛型使用----深入轻松学编程!!!

news/2024/4/28 1:52:49

2、泛型的使用

2.1、什么是泛型
什么是泛型?泛型按照字面意思来理解 就是 广泛的数据类型 ....所谓的泛型 其实就是一种数据类型 这个数据类型究竟是什么?不确定 这个数据类型的确定是在程序的运行过程中简单的说 就是这个数据类型的确定的时机不一致我们以前学习的数据类型都是在编写代码的时候 直接申明的  int  float ... double....现在这个数据类型是在程序运行时候 动态的确定的...
2.2、泛型的在方法中的使用
重点:方法中的泛型 是在调用这个方法的时候 去确定的这个数据类型
public class Test001 {
​
​public static void main(String[] args) {Object[] objects = test006(String.class);objects[0]=123;System.out.println("数组的长度是:"+objects.length);}
​/*** @param t* @param <T> :定义了一个数据类型  这个数据类型是什么并不确定*            注意事项:这个泛型的定义不一定用T 来定义 可以使用任何的名字来进行定义*            一般泛型的定义使用*            T :type类型*            E:Element节点*            K,V :键值对* @return*/public static <T> T test001(T t) {System.out.println("T:" + t);return t;}
​
​public static <T, B> T test002(T t, B b) {System.out.println("T:" + t + "---B:" + b);return t;}
​
​public static <T> T[][] test003(T[]... t) {return t;}
​
​public static <T> T test004(String str) {System.out.println("str:"+str);return (T) str;}
​public static <T> T test005(String str) {//能不能在这里确定这个数据类型是啥呢?T t= (T) "中国好";return t;}
​public static <T> T[] test006(Class<String> clazz) {//能不能使用这个T 创建一个泛型的数组呢?//给人一种感觉 就是只要知道这个数据类型就可以创建数组?T[]  tArray = (T[]) Array.newInstance(clazz, 10);return tArray;}
}
2.3、泛型在类中的使用
类中泛型是在 new这个类的对象的时候 确定这个数据类型是啥

2.3.1、编写R类
 // @description: 这个类是我们的结果集的统一返回类@Data   //只要getter和setter方法
public class R<T> {private Integer code;  //状态码 0:成功  非0:失败private String message;  //请求失败之后的提示信息private T t;
}
2.3.2、编写枚举类
public enum ResponseCode {SUCCESS(0, "请求成功"),FAIL(-1, "请求失败");
​private Integer code;private String message;
​ResponseCode(Integer code, String message) {this.code = code;this.message = message;}
​public Integer getCode() {return code;}
​public void setCode(Integer code) {this.code = code;}
​public String getMessage() {return message;}
​public void setMessage(String message) {this.message = message;}
}
2.3.3、编写测试类
public class TestTypeType {
​public static void main(String[] args){//类中的泛型是在这个类 初始化的时候 去确定数据类型 简单的说 就是new的时候//注意事项:就是泛型只能使用包装类型
​R<String> r = new R<>();r.setCode(ResponseCode.SUCCESS.getCode());r.setMessage(ResponseCode.SUCCESS.getMessage());r.setMessage("中国人民万岁...");//这个R对象于是就设置成功了...
​System.out.println("R:"+r);
​}
}
2.4、泛型在接口中的使用
2.4.1、泛型在接口中的使用1
2.4.1.1、编写接口
public interface UserDAO<T> {/*** 打印的这个方法* @param t*/T print(T t);
}
2.4.1.2、编写接口的实现类
public class UserDAOImpl implements UserDAO<User>{@Overridepublic User print(User user) {System.out.println("user:"+user);return user;}
}
2.4.1.3、编写测试类
public class TestInterfaceType {public static void main(String[] args) {//多态UserDAO userDAO = new UserDAOImpl();Object result = userDAO.print(new User(1, "小波波", "123"));System.out.println("返回的数据是:" + result);}
}
2.4.2、数据类型前移的问题
2.4.2.1、编写接口
public interface UserDAO<T> {/*** 打印的这个方法* @param t*/T print(T t);
}
2.4.2.2、编写接口的实现类
public class UserDAOImpl<T> implements UserDAO<T> {
​@Overridepublic T print(T t) {System.out.println("传递过来的T的值是:"+t);return t;}
}
2.4.2.3、编写测试类
  public static void main(String[] args) {/*** 判断一个程序的好坏 有如下原则*    开里依   单迪离*  开:开闭原则**  里:里氏替换原则***  依:依赖倒置*  单:单一职责*  迪:迪米特法则*  离:接口隔离*/UserDAO userDAO=new UserDAOImpl<User>();Object print = userDAO.print(new User(2, "中国好", "哈哈哈"));System.out.println("结果是:"+print);}
2.5、泛型的向上和向下转型的问题(泛型的不确定性的问题)
2.5.1、向下转型的问题
public class TestConvert1 {
​public static void main(String[] args) {UserService userService = new UserService<>();print2(userService);}
​/*** 向上和向下转型实际上是为了限制这个输入参数的问题*   保证这个输入参数在某一个范围内?*/
​
​/*** 下面这个表示的是传递的是List的孩子* @param userService*/public static void print(UserService<? extends Number> userService){
​}
​
​/*** 这里就表示的是传递的参数  必须是 List或者 List的爹* @param userService*/public static void print1(UserService<? super Number> userService){
​}
​/*** 下面的? 就表示的是传递啥子都可以* @param userService*/public static void print2(UserService<?> userService){
​}
​
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.cpky.cn/p/10763.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

设计模式 -- 1:简单工厂模式

目录 代码记录代码部分 代码记录 设计模式的代码注意要运用到面向对象的思想 考虑到紧耦合和松耦合 把具体的操作类分开 不让其互相影响&#xff08;注意这点&#xff09; 下面是UML类图 代码部分 #include <iostream> #include <memory> // 引入智能指针的头文…

Python哪个版本最稳定好用2023.10.19

环境&#xff1a; win10 专业版 Python 问题描述&#xff1a; python哪个版本最稳定好用 解决方案&#xff1a; 目前&#xff0c;Python 的最新版本是 3.11.0。然而&#xff0c;对于大多数用户来说&#xff0c;Python 3.8 和 3.9 是最稳定和好用的版本&#xff0c;因为它们…

8:00面试,8:06就出来了,问的问题有点变态。。。

从小厂出来&#xff0c;没想到在另一家公司又寄了。 到这家公司开始上班&#xff0c;加班是每天必不可少的&#xff0c;看在钱给的比较多的份上&#xff0c;就不太计较了。没想到9月一纸通知&#xff0c;所有人不准加班&#xff0c;加班费不仅没有了&#xff0c;薪资还要降40%…

鸿蒙Harmony应用开发—ArkTS声明式开发(基础手势:TextPicker)

滑动选择文本内容的组件。 说明&#xff1a; 该组件从API Version 8开始支持。后续版本如有新增内容&#xff0c;则采用上角标单独标记该内容的起始版本。 子组件 无 接口 TextPicker(options?: {range: string[] | string[][] | Resource | TextPickerRangeContent[] | Te…

数据可视化实战(二)

将每个城市在每个月份平均PM2.5绘制成折线图 import pandas as pd import matplotlib.pyplot as plt df pd.read_excel(./PM2.5.xlsx)display(df.head(10)) df.shape # (161630, 15)城市年份月份日期小时季节PM2.5露点湿度压强温度风向累计风速降水量累计降水量0北京2010112…

酒店管理系统|基于Spring Boot框架+ Mysql+Java+ B/S结构的酒店管理系统设计与实现(可运行源码+数据库+设计文档)

推荐阅读100套最新项目 最新ssmjava项目文档视频演示可运行源码分享 最新jspjava项目文档视频演示可运行源码分享 最新Spring Boot项目文档视频演示可运行源码分享 2024年56套包含java&#xff0c;ssm&#xff0c;springboot的平台设计与实现项目系统开发资源&#xff08;可…