java的泛型hei
泛型是一种未知的数据类型,当我们不知道使用什么数据类型的时候就可以使用泛型
泛型也可以看出是一个变量,用来接受数据类型
E e :Element 元素
T t: Type 类型
- /*
- Collection<E> extends Iterable<E>,所有单鞋集合恶斗可以使用增强for
- public interface Iterable<T>
- 实现此接口允许对象成为“for-each loop”语句的目标。
- 增强for循环,用来遍历结合和数组
- 格式:
- for(集合/数组的数据类型 变量名:集合名/数组名){
- sout(变量名)
- }
- */
- /*
- 使用泛型
- 避免类型转换的满分,存储时什么类型,出去就是什么类型
- 运行期间异常,提到编译期的异常
- */
- ////创建集合对象,不用泛型
- // 集合不使用泛型,默认的类型是object类型,可以存储任意类型的数据
- // 不安全,会引发异常
- public class DemoFor {
- public static void main(String[] args) {
- show1();
- show2();
- }
- /*
- 使用泛型
- 避免类型转换的满分,存储时什么类型,出去就是什么类型
- 运行期间异常,提到编译期的异常
- */
- private static void show2(){
- ArrayList<String> list = new ArrayList<>();
- list.add("BBB");
- Iterator<String> it = list.iterator();
- while (it.hasNext()){
- String s = it.next();
- // int i= it.next().length();不能进行流式编程
- System.out.println(s);
- System.out.println(s.length());
- }
- }
- ////创建集合对象,不用泛型
- // 集合不使用泛型,默认的类型是object类型,可以存储任意类型的数据
- // 不安全,会引发异常
- private static void show1(){
- ArrayList list = new ArrayList();
- list.add("DDDD");
- list.add(1);
- // 迭代器遍历
- Iterator it =list.iterator();
- while (it.hasNext()){
- Object obj = it.next();
- System.out.println(obj);
- // 想要使用String类特有的方法,length获取字符串的长度,
- // 现在不能使用,因为多态 object obj = "obj" 不能使用子类特有的方法
- // 需要向下转型 String s = (String)obj;
- //// 会抛出异常ClassCastException,不能把Integer类型转换为String类型
- // String s = (String)obj;
- // System.out.println(s.length());
- }
- }
- }
- /*
- DDDD
- 1
- BBB
- 3
- */
自定义泛型:
自定义一个泛型类:
- /*
- 定义含有泛型的类,模拟ArrayList
- 泛型是一个位置的数据类型,当我们不确定什么数据类型的时候,可以使用泛型
- 泛型可以接受任意数据类型,可以使用String ,Integer
- 创建对象的时候确定泛型的数据类型
- */
- public class Gennerice<E> {
- private E name;
- public E getName() {
- return name;
- }
- public void setName(E name) {
- this.name = name;
- }
- }
实例化:
- public class GenericeDo {
- public static void main(String[] args) {
- // 不写泛型,默认是objcet
- Gennerice gc = new Gennerice();
- gc.setName("dddd");
- Object obj = gc.getName();
- // 创建对象,使用泛型Intager
- Gennerice<Integer> gc2 = new Gennerice<>();
- gc2.setName(999);
- Integer name = gc2.getName();
- System.out.println(name);
- // 使用字符串类型
- Gennerice<String> gc3 = new Gennerice<>();
- gc3.setName("RRRR");
- String name2 = gc3.getName();
- System.out.println(name2);
- }
- }
含有泛型的方法
- /*
- 定义含有泛型的方法,泛型定义在修饰符和返回值之间
- 格式:
- 修饰符 <泛型> 返回值类型 方法名 (参数列表(使用泛型)){
- 方法体
- }
- 含有泛型的方法,在调用方法的时候确定泛型的数据类型,传递什么类型的参数,泛型就是什么类型
- */
- public class GenericMethod {
- public <M> void methon(M m){
- System.out.println(m);
- }
- // 含有泛型的静态方法:
- public static <S> void methon2(S s){
- System.out.println(s);
- }
- }
测试:
- public class GmTest {
- public static void main(String[] args) {
- GenericMethod gm = new GenericMethod();
- // 调用泛型方法,传递什么类型就是什么类G型
- gm.methon(10);
- gm.methon("ddd");
- gm.methon2("静态方法的调用,不建议创建对象使用");
- // 静态方法,通过类名.方法名 直接调用
- GenericMethod.methon2(999);
- GenericMethod.methon2("quan");
- }
- }
- /*
- 10
- ddd
- 静态方法的调用,不建议创建对象使用
- 999
- quan
- */
含有泛型的接口
- public interface GenerInterface<I> {
- // 抽象函数
- public abstract void method(I i);
- }
第一种使用方式:
- /*
- 含有泛型的接口:第一种:定义接口的实现,指定接口的泛型
- */
- public class GenInterTest implements GenerInterface<String> {
- @Override
- public void method(String s){
- System.out.println(s);
- }
- }
第二种使用方式:
- /*
- 第二种使用方式,
- 接口使用什么泛型,实现类就使用什么泛型,类跟着接口走
- 相当于定义了一个含有泛型的类,实现对象的时候觉得泛型的数据类型
- */
- public class GenInterTest2<I> implements GenerInterface<I>{
- @Override
- public void method(I i) {
- System.out.println(i);
- }
- }
测试:
- public class GenInterTestALl {
- public static void main(String[] args) {
- GenInterTest git = new GenInterTest();
- git.method("done");
- //
- GenInterTest2<Integer> git2 = new GenInterTest2<>();
- git2.method(111);
- GenInterTest2<String> git3 = new GenInterTest2<>();
- git3.method("WUQN");
- }
- }
- /*
- done
- 111
- WUQN
- */
泛型通配符:
泛型的上限限定:
java的泛型hei的更多相关文章
- [改善Java代码]Java的泛型是类型擦除的
泛型可以减少强制类型的转换,可规范集合的元素类型,还可以提高代码的安全性和可读性,正是因为有了这些优点,自从Java引入泛型之后,项目的编码规则上便多了一条,优先使用泛型. Java泛型(Generi ...
- Java 中泛型的全面解析(转)
Java泛型(generics) 是JDK 5中引入的一个新特性,允许在定义类和接口的时候使用类型参数(type parameter).声明的类型参数在使用时用具体的类型来替换.泛型最主要的应用是在J ...
- Java中泛型 类型擦除
转自:Java中泛型是类型擦除的 Java 泛型(Generic)的引入加强了参数类型的安全性,减少了类型的转换,但有一点需要注意:Java 的泛型在编译器有效,在运行期被删除,也就是说所有泛型参数类 ...
- Java 泛型 Java使用泛型的意义
Java 泛型 Java使用泛型的意义 @author ixenos 直接意义 在编译时保证类型安全 根本意义 a) 类型安全问题源自可复用性代码的设计,泛型保证了类型安全的复用模板 b) 使用复用性 ...
- 跟着刚哥梳理java知识点——泛型(十三)
一. 泛型概念的提出(为什么需要泛型)? 首先,我们看下下面这段简短的代码: public class GenericTest { public static void main(String[] a ...
- 【Java】泛型学习笔记
参考书籍 <Java核心技术:卷1> 泛型, 先睹为快 先通过一个简单的例子说明下Java中泛型的用法: 泛型的基本形式类似于模板, 通过一个类型参数T, 你可以"私人定制&qu ...
- [转] Java 的泛型擦除和运行时泛型信息获取
原文链接 https://my.oschina.net/lifany/blog/875769 前言 现在很多程序员都会在简历中写上精通 Java.但究竟怎样才算是精通 Java 呢?我觉得不仅要熟练掌 ...
- Java 容器 & 泛型:五、HashMap 和 TreeMap的自白
Writer:BYSocket(泥沙砖瓦浆木匠) 微博:BYSocket 豆瓣:BYSocket Java 容器的文章这次应该是最后一篇了:Java 容器 系列. 今天泥瓦匠聊下 Maps. 一.Ma ...
- 【译】9. Java反射——泛型
原文地址:http://tutorials.jenkov.com/java-reflection/generics.html ===================================== ...
随机推荐
- “百度杯”CTF比赛 九月场Upload
首先生成一个php文件以下源代码: <script language="PHP">$fh=fopen("../flag.".strtolower(& ...
- kali linux安装nessus
详细介绍在 Kali 中安装 Nessus 的详细过程步骤以及插件下载失败解决方法. 实验环境 安装过程 下载 Nessus 安装 Nessus 启动 Nessus 获取激活码 登陆 web 界面 N ...
- 带你玩转CompletableFuture异步编程
前言 最近在忙生活的第一个OKR,这个等等后面具体聊聊,今天开始恢复每周一篇原创,感谢小伙伴的不离不弃.这篇文章也是最近在Code Review的时候,看到的大家代码,想整体推下大家异步编程的思想,由 ...
- iOS 通知扩展插件
iOS 通知扩展插件 目录 iOS 通知扩展插件 Notification Service Extension 新建一个target 代码实现 注意事项 UINotificationConentExt ...
- 【C# .Net GC】强制垃圾回收 和System GC
属性 GC.MaxGeneration:获取系统当前支持的最大代数. 方法 GC.GetTotalMemory(bool forceFullCollection) 方法 true表示该方法先做垃圾收 ...
- 【C#】String| StringBuilder 字符
原文链接:https://www.cnblogs.com/huameitang/p/10528646.html 字符串是用于表示文本的字符的有序集合. String对象是对象的有序集合 System. ...
- CVE-2022-22947 Spring Cloud Gateway SPEL RCE复现
目录 0 环境搭建 1 漏洞触发点 2 构建poc 3 总结 参考 0 环境搭建 影响范围: Spring Cloud Gateway 3.1.x < 3.1.1 Spring Cloud Ga ...
- 爬虫之Beautfulsoup模块及新闻爬取操作
今日内容概要 IP代理池的概念及使用 requests其他方法补充 Beautifulsoup模块 避免你自己写正则表达式 利用该模块爬取京东的商品信息 今日内容详细 IP代理池的概念及使用 1.有很 ...
- 在java的继承中你是否有这样的疑惑?
一.问题 最近在写代码,有两个属性很相近的类,其中80%的属性(字段)都是一样的,剩下的才是各自不一样的,在设计的时候,采用了继承的方式,抽象除了一个父类,大概如下, 有FirstChild和Seco ...
- Log4j2详解——XML配置详解
Log4j2详解--XML配置详解 找到了个很详细的文章链接 https://www.jianshu.com/p/bfc182ee33db