JAVA进阶教学之(泛型)

泛型

引言:

  • 泛型:泛型允许程序员在编写代码时使用一些以后才指定的类型,在实例化时作为参数指明这些类型
  • 人话:泛型对规定范围产生约束,约束后只能存储泛型指定的类型
  • 诞生:JDK5.0以后

 

  • 作用:泛型旨在程序的编译阶段起作用,只是给编译器参考使用的(运行阶段泛型没用)
  • 使用:List<类名A标识符>,表示List集合中只允许存储类名A类型的数据,用泛型来指定集合中存储的数据类型,<类名标识符>里面一般是类名,也可以自定义类名标识符

 

  • 优点:集合存储的元素类型统一,集合中取出的元素类型是泛型指定类型,不需要进行大量的“向下转型”,不需要大量的"强制类型转换"
  • 缺点:集合中存储的元素缺乏多样性

 

代码演示:

 

未使用泛型前:

package com.lbj.javase.collection;import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;public class GenericTest01 {public static void main(String[] args) {List list=new ArrayList<>();//准备对象Animal animal=new Cat();Animal animal1=new Bird();//将对象添加到集合中list.add(animal);list.add(animal1);//遍历集合,取出每个Animal,让它move()Iterator iterator=list.iterator();while (iterator.hasNext()){//o中没有move方法,无法调用,需要向下转型Object o=iterator.next();//通过判断是否o属于某个类,达到转型效果if (o instanceof Animal){Animal a= (Animal) o;a.move();System.out.println(a);}}}}
class Animal{public void move(){System.out.println("动物在移动");}
}
class Cat extends Animal{//子类特有方法public void catchMouse(){System.out.println("猫抓老鼠");}
}
class Bird extends Animal{//子类特有方法public  void fly(){System.out.println("鸟在飞");}
}

 

使用泛型后:

package com.lbj.javase.collection;import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;public class GenericTest01 {public static void main(String[] args) {List list=new ArrayList<>();//准备对象Animal cat=new Cat();Animal bird=new Bird();//将对象添加到集合中list.add(cat);list.add(bird);//遍历集合,取出每个Animal,让它move()
//        Iterator iterator=list.iterator();
//        while (iterator.hasNext()){
//            //o中没有move方法,无法调用,需要向下转型
//            Object o=iterator.next();
//
//            //通过判断是否o属于某个类,达到转型效果
//            if (o instanceof Animal){
//                Animal a= (Animal) o;
//                  a.move();
//                System.out.println(a);
//            }//}//获取迭代器Iterator<Animal> iterator=list.iterator();//遍历集合,表示迭代器迭代的是Animal类型while (iterator.hasNext()){//使用泛型后,每一次迭代返回的数据都是Animal类型Animal animal=iterator.next();animal.move();System.out.println(animal);//调用子类特有的方法还是需要继续向下转型的if (animal instanceof Cat){Cat c= (Cat) animal;c.catchMouse();}if (animal instanceof Bird){Bird b= (Bird) animal;b.fly();}}}}
class Animal{public void move(){System.out.println("动物在移动");}
}
class Cat extends Animal{//子类特有方法public void catchMouse(){System.out.println("猫抓老鼠");}
}
class Bird extends Animal{//子类特有方法public  void fly(){System.out.println("鸟在飞");}
}

 

自定义泛型:

引言 :

自定义泛型类就是把泛型定义在类上,用户使用该类的时候,才把类型明确下来

 

自定义泛型的时候,<>是尖括号中的一个标识符,内容随便写

java源代码中经常出现的<E>和<T>

<E> 表示 Element

<T>表示 Type

 

用户想要使用哪种类型,就在创建的时候指定类型。使用的时候,该类就会自动转换成用户想要使用的类型了。

 

代码演示:

package com.lbj.javase.collection;/*** @author LBJ* @version V1.0* @Package com.lbj.javase.collection* @date 2021/4/10 15:49* @Copyright 公司*/
public class GenericTest03{
//类比得出结论
public static void main(String[] args) {//创建对象并指定元素类型ObjectTool<String> tool = new ObjectTool<>();tool.setObj(new String("asdfghjkl"));String s = tool.getObj();System.out.println(s);//创建对象并指定元素类型ObjectTool<Integer> objectTool = new ObjectTool<>();/*** 如果我在这个对象里传入的是String类型的,它在编译时期就通过不了了.*///objectTool.setObj("asda");objectTool.setObj(10);int i = objectTool.getObj();System.out.println(i);
}
}class ObjectTool<T>{public T obj;public T getObj() {return obj;}public void setObj(T obj) {this.obj = obj;}
}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python怎么设置代码执行时间_python 代码运行时间获取方式详解

我们知道为了提高代码的运行速度&#xff0c;我们需要对书写的python代码进行性能测试&#xff0c;而代码性能的高低的直接反馈是电脑运行代码所需要的时间。这里将介绍四种常用的测试代码运行速度的方法。 第一种&#xff1a;使用time模块对代码的运行时间进行统计&#xff0c…

JAVA进阶教学之(foreach)

foreach&#xff1a; 概念&#xff1a;就是for循环的一个增强版&#xff0c;可以方便程序员对于数组的直接操作&#xff0c;不用考虑数组下标的情况下进行遍历输出 代码演示&#xff1a; package com.lbj.javase.collection;public class ForEachTest01 {public static void m…

c语言与python通信_C和Python – 与套接字通信

我正在尝试使用UNIX域套接字在C程序和 Python脚本之间进行通信. Python脚本通过UNIX域套接字将数据发送到C程序. 这是我的C程序的相关代码&#xff1a; #include #include #include #include #include #include #define UNIX_PATH_MAX 100 int main(void) { struct socka…

口琴膜片什么作用_2020年半音阶口琴选购攻略,让小白告别选择困难

为什么我会喜欢上口琴&#xff0c;其实是因为小时候看到《数码宝贝》里的阿和吹奏口琴&#xff0c;当时觉得很酷。不过家里条件很差&#xff0c;想要一个但是没提&#xff0c;后来工作买了一把铃木的。不过选口琴是一个很麻烦的事情&#xff0c;品类太多。在了解的过程中&#…

JAVA进阶教学之(集合)

目录 1、集合概述 2、集合存储的数据类型 3、不同的集合&#xff0c;底层都会对应不同的数据结构 4、集合继承结构图&#xff08;部分接口和类&#xff09; 5、Collection接口中常用的方法 6、Collection 集合迭代&#xff08;遍历&#xff09; 7、Collection的contains…

python中有数组吗_python有数组吗

广告关闭 腾讯云11.11云上盛惠 &#xff0c;精选热门产品助力上云&#xff0c;云服务器首年88元起&#xff0c;买的越多返的越多&#xff0c;最高返5000元&#xff01;感悟&#xff1a; 1.python列表操作里不允许变量类型的指针2.case1类似于冒泡排序操作&#xff0c;这个是满足…

flutter天气_牛笔!自己用Flutter撸一个天气APP

这是一款简约风格的 flutter 天气项目&#xff0c;提供实时、多日、24 小时、台风路径以及生活指数等服务&#xff0c;支持定位、删除、搜索等操作。下图为主页效果&#xff1a;开始本身作为天气 APP&#xff0c;自定义绘制自然少不了&#xff0c;首页多样的背景效果&#xff0…

电脑远程凭证不工作:解决

电脑 远程桌面连接你的凭据不工作解决方法 方法/步骤 第一步我们首先需要知道远程桌面连接你的凭据不工作原因是&#xff0c;远程的电脑拒绝了访问&#xff0c;需要设置在远程的电脑上设置安全选项&#xff0c;按winR键&#xff0c;打开运行&#xff0c;输入“gpedit.msc”&a…

python汉诺塔递归算法_Python文摘:汉诺塔问题与递归算法

历史传说&#xff1a; 在世界中心贝拿勒斯&#xff08;在印度北部&#xff09;的圣庙里&#xff0c;一块黄铜板上插着三根宝石针。印度教的主神梵天在创造世界的时候&#xff0c;在其中一根针上从下到上地穿好了由大到小的64片金片&#xff0c;这就是所谓的汉诺塔。不论白天黑夜…

python print格式化输出类型_第一讲:Python print() 格式化输出

由于书本上少了这个知识&#xff0c;所以总结如下&#xff0c;各同学看完后完成对应的试题&#xff1a;格式符为真实值预留位置&#xff0c;并控制显示的格式。格式符可以包含有一个类型码&#xff0c;用以控制显示的类型&#xff0c;如下:%s 字符串 (采用str()的显示)%r …

转-递归教学

作者&#xff1a;帅地 链接&#xff1a;https://www.zhihu.com/question/31412436/answer/683820765 来源&#xff1a;知乎 著作权归作者所有。商业转载请联系作者获得授权&#xff0c;非商业转载请注明出处。 递归专题连续刷题半年&#xff0c;从小白到学会了套路&#xff…

android游戏编程之从零开始_纯C语言程序员写的编程新手入门基础小游戏之最炫酷推箱子...

很多编程爱好者都编写过推箱子游戏编程吧&#xff0c;最近有好些朋友看见我以前的推箱子程序后&#xff0c;问我是怎么做的。我一直想把这个程序的整个过程写一份详细的东西&#xff0c;与各位编程爱好者分享&#xff0c;一直没空。正好现在放假了&#xff0c;而且离回家还有几…

数据库新增幂等操作_使用数据库唯一键实现事务幂等性

幂等性概念在分布式系统中&#xff0c;幂等性是一致性方面的一个重要概念。幂等(idempotent、idempotence)是一个数学与计算机学概念&#xff0c;常见于抽象代数中。在编程中一个幂等操作的特点是其任意多次执行所产生的影响均与一次执行的影响相同。所谓“影响相同”&#xff…

python re模块compile_Python re模块的match方法

pattern re.compile("\d") 将正则表达式编译成一个Pattern规则对象 pattern.match() 从开始位置开始往后查找&#xff0c;返回第一个符合规则的对象 pattern.search() 从任何位置开始往后查找&#xff0c;返回第一个符合规则的对象 pattern.findall() 所有的全部匹配…

考研数学(180°为什么等于π)

之所以要定义弧度制,是因为它的单位相比角度制有很大的优越性. 弧度的大小是两个长度之比,长度的单位是统一的,所以相比以后,可以认为弧度的单位为1,即以实数单位为单位. 弧度可以看做导出单位. 而角度制则不然,角度制单位是1/360周角,然而,1/360是怎么来的?为什么是周角除360…

c++ h cpp文件如何关联_C++核心准则SF.5: .cpp文件必须包含定义它接口的.h文件

SF.5: A .cpp file must include the .h file(s) that defines its interfaceSF.5: .cpp文件必须包含定义它接口的.h文件Reason(原因)This enables the compiler to do an early consistency check.这样可以让编译器尽早进行一致性检查。Example, bad(反面示例)// foo.h:void f…

常用的python脚本_五个python常用运维脚本面试题实例

一、用Python写一个列举当前目录以及所有子目录下的文件&#xff0c;并打印出绝对路径 #!/usr/bin/env python import os for root,dirs,files in os.walk(/tmp): for name in files: print (os.path.join(root,name)) os.walk() 原型为&#xff1a;os.walk(top, topdownTrue, …

JAVA进阶教学之(IO流)

目录 1、什么是IO流 2、流的分类 3、流的四大家族首领 4、java.io.*包下需要掌握的16个流 5、FileInputStream的实用方法 6、FileOutputStream的方法 7、文件复制/拷贝 8、FileReader的使用 9、FileWriter的使用 10、复制普通文本文件 11、BufferedReader带有缓冲区…

sonar 代理_Sonar

关于Sonar费用&#xff1a;免费;更新频率&#xff1a;持续更新;搜索来源&#xff1a;亚马逊;关键词总数&#xff1a;美国站约1亿&#xff0c;全球约1.8亿;关键词反查&#xff1a;支持;PPC关键词查询&#xff1a;支持;其他功能&#xff1a;关键词翻译。功能1、亚马逊PPC管理&…

devtools安装_R语言如何批量安装软件包

1. 为什么要批量安装R语言包当你在新的环境下&#xff0c; 安装R语言时&#xff0c;你需要安装很多包&#xff0c;比如tidyverse&#xff0c;比如data.table&#xff0c;这里你可以写一个函数&#xff0c;将所有需要的包写进去&#xff0c;然后进行批量安装2. 程序如下&#xf…