获取list泛型_泛型

f71fbf1fe24244dd89cb3c34db478d78.png

泛型

什么是泛型?为什么使用泛型?

泛型的出现意味着编写的代码可以被不同类型的对象所重用,提升了代码的重用性。泛型的本质是参数化类型,即将所需操作的数据类型设置为一个参数。 举个实际中的栗子:我们需要设计一个柜子的类,柜子可以用于存放书本、食品或者衣物,但是我们在设计阶段不能确定柜子里具体要存放什么东西,那怎么来设计这样一个通用型的柜子,这里就可以用到泛型。所以,我们把存放元素的类型设计成一个参数,这个类型参数就称之为泛型。 举个JAVA中的栗子:ArrayList,List,这个就是类型参数,也就是泛型。为什么这么写呢?因为我们在创建Arraylist或者List时,无法确定里面具体存储的元素的类型,但是我们有希望一个实例对象中存储的元素的类型时一致的,这就需要泛型来实现操作。

  int[] arr1 = new int[] {159,357,456};//没有用泛型,ArrayList中存储的元素格式各样,实际开发中在操作时是很容易出现问题的List list1 = new ArrayList();list1.add(123);list1.add("敲代码的阿茄");list1.add(arr1);//使用泛型,限制ArrayList存放的元素的类型,就不能添加存储其他类型的元素了List<String> list2 = new ArrayList<>();list2.add("敲");list2.add("代");list2.add("码");list2.add("的");list2.add("阿");list2.add("茄");//list2.add(123);//无法添加//list2.add(arr1);//无法添加

泛型使用的基本要求

  • 异常类不能声明为泛型。
  • 泛型不能是基本数据类型,需要使用基本数据类型的泛型可以写成其包装类。
  //List<int> list2 = new ArrayList<>();List<Integer> list2 = new ArrayList<>();

自定义泛型类

在类或接口中声明的泛型,可以作为非静态属性的类型、非静态方法的参数类型、非静态方法的返回值。但是,不能在静态方法中使用类的泛型

 // 泛型类:类中定义有不确定的类型public class Dict<T> {String dictName;int dictCount;T dictT;//泛型类下用了泛型的方法,报错,需要去掉static//public static void get(T dictT) {// this.dictT = dictT;//}//泛型类下没用泛型的方法public static void set() {System.out.println("");}}

泛型方法和泛型类下的方法?

泛型方法:该泛型方法所在的类可以不是泛型类。往直观一点讲,方法中出现了泛型结构<>。 那么,泛型方法可以是静态的吗?可以,因为泛型参数是在调用方法时确定的,并非在实例化时确定的。

      public class GenericTest {public static void main(String[] args) {Dict<Float> dict = new Dict<>();dict.set1(0.0f);//调用泛型方法,泛型类型跟类的泛型没关系,不受影响dict.set2(" ");dict.set2(36);dict.set2(new ArrayList());}}//泛型类class Dict<T> {String dictName;int dictCount;//泛型类中的方法:如果调用了泛型则不能为静态public  void set1(T dictT) {System.out.println("我是泛型类下的方法");}//泛型方法:可以为静态public  static <T> void set2(T dictT) {System.out.println("我是泛型方法");}}

泛型与继承

  • 如果类A是类B的父类,但是,G<A>不是G<B> 的父类(G是类或者接口),两个属于不同的类。所以不存在两者间的多态和向上转型。
  • 但是呢,A<G>仍然是B<G>的父类。

通配符

通配符:?

  • 利用通配符,创建二者的共同父类,G<A>G<B>的共同父类G<?>
  • 但是,不能往其中添加新数据,常用于赋值操作而已,仅能添加null;
  • 允许读取数据,读取数据的类型为object;

举例说明:定义List<?>List<Object>List<String>的公共父类。

        //不能添加数据,除了nullList<?> list = new ArrayList<>();//list.add(16);//报错//list.add(" ");//报错list.add(null);//允许读取数据List<?> list = new ArrayList<>();List<String> list1 = new ArrayList<>();list1.add("newstring");list =list1;list.add(null);Object obj = list.get(0);System.out.println(obj);//newstring

有限制条件的通配符

  • G<? extends A>可以作为G<A>G<B>的父类,其中B是A的子类;即,可以作为所有继承于A类的类G<A的子类>的父类。
  • G<? super A>可以作为G<A>G<B>的父类,其中B是A的父类;即,可以作为所有A的父类的G<A的父类>的父类。
        // 下面举例类的关系:Earth extends Sun, Sun extends UniverseList<? extends Sun> list1 = new ArrayList<>();// 可以作为List<Sun及其子类>的父类List<? super Sun> list2 = new ArrayList<>();// 可以作为List<Sun及其父类>的父类List<Universe> list3 = new ArrayList<>();List<Sun> list4 = new ArrayList<>();List<Earth> list5 = new ArrayList<>();list1 = list4;// 多态list2 = list4;//多态// 读取数据Sun s1 =list1.get(0);//获取的数据是Sun或者Sun的子类的对象,可以实现多态Earth e1 =(Earth)list1.get(0);//不强转会报错,因为获取的数据可能是Sun的对象,父类转子类需要强转Sun s2=(Sun)list2.get(0);//不强转会报错,获取的数据可能是Sun的父类,父类转子类需要强转Object o=list2.get(0);//不强转情况下,只能是Object// 写入数据list2.add(new Sun());//只能添加Sun本身,或者Sun的子类//因为list2存的可能是Sun及其父类,假设new的是Universe,但是list2中存储的是Sun,//即实际?=Sun,那么Universe作为父类是无法直接赋给子类的list2.add(new Earth());//list1.add();//无法添加数据,因为你无法确定存储的子类有多小

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

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

相关文章

w10计算机字体怎么设置在哪里设置,如何设置修改win10系统电脑的显示字体

如何设置修改win10系统电脑的显示字体腾讯视频/爱奇艺/优酷/外卖 充值4折起今天给大家介绍一下如何设置修改win10系统电脑的显示字体的具体操作步骤。1. 首先鼠标左键开始&#xff0c;然后在菜单下的左下角选择设置图标。2. 进入Windows 设置后&#xff0c;单击个性化。3. 接着…

uva 10801 - Lift Hopping(最短路Dijkstra)

1 /*2 题目大意&#xff1a;3 就是一幢大厦中有0&#xff5e;99的楼层, 然后有1&#xff5e;5个电梯&#xff01;每个电梯有一定的上升或下降速度和楼层的停止的位置&#xff01;4 问从第0层楼到第k层最少经过多长时间到达&#xff01;5 6 思路&#x…

powerdesigner mysql 自增主键_PowerDesigner Mysql 主键自增、初始值、字符集

自增在你所要设为自增型的键上(比如你的id)双击&#xff0c;弹出一个Column Properties对话框&#xff0c;右下角有一个Identify的选择框&#xff0c;选中它OK&#xff0c;就可以了。 再去查看Preview&#xff0c;就能看到AUTO_INCREMENT。起始值默认自增字段从1开始, 如果需要…

计算机设置从u盘启动怎么办,电脑设置从u盘启动盘启动出现蓝屏该怎么解决?

电脑设置从u盘启动蓝屏怎么办?我们在电脑遇到系统等问题时&#xff0c;经常会选择使用u盘重装系统&#xff0c;这种重装方式可以说是目前最便捷实用的了。但是最近又有用户反映将U盘设置为第一启动项后&#xff0c;电脑没办法从u盘启动&#xff0c;出现了蓝屏的情况&#xff0…

NYOJ 99单词拼接(有向图的欧拉(回)路)

1 /*2 NYOJ 99单词拼接:3 思路&#xff1a;欧拉回路或者欧拉路的搜索&#xff01;4 注意&#xff1a;是有向图的&#xff01;不要当成无向图&#xff0c;否则在在搜索之前的判断中因为判断有无导致不必要的搜索&#xff0c;以致TLE!5 有向图的欧拉路&#xff1a;ab…

mysql 过程和函数_MySQL:存储过程和函数

变量系统变量变量由系统提供&#xff0c;不是用户自定义的&#xff0c;属于服务器层面全局变量会话变量# 如果是全局级别&#xff0c;则需要加global&#xff0c;如果是会话级别&#xff0c;则需要加session&#xff0c;如果不写&#xff0c;则默认是会话# 查看全局变量SHOW GL…

python修改服务器ip,[python+Bat]读表修改机房IP

[Shell] 纯文本查看 复制代码拷贝一下脚本到.bat文件&#xff0c;双击运行即可&#xff0c;有交互式提示输入新的计算机名 ECHO OFFcolor 0AECHO ----------------------------------------------------------------------------ECHO.ECHO 版权所有 copyright of ECHO.ECHO ~~~…

hdu 1811Rank of Tetris (并查集 + 拓扑排序)

1 /*2 题意&#xff1a;这些信息可能有三种情况&#xff0c;分别是"A > B","A B","A < B"&#xff0c;分别表示A的Rating高于B,等于B,小于B。3 4 现在Lele并不是让你来帮他制作这个高手榜&#xff0c;他只是想知道&#xff0c;根据这…

ambari mysql jar_从零开始安装 Ambari (3) -- 安装 Ambari

1. 安装yum -y install ambari-server2. ambari server 需要一个数据库存储元数据&#xff0c;默认使用的 Postgres 数据库。默认的用户名和密码是&#xff1a; ambari/bigdata 。但是一般情况下&#xff0c;后面还要安装 hive 和 Ranger&#xff0c;也需要一个存元数据的数据库…

服务器2012系统在dos卸载,Windows系统下彻底删除Windows.old 文件夹的方法

系统是直接硬盘安装的&#xff0c;导致c盘产生了旧系统的文件夹Windows.old&#xff0c;占用很大的磁盘空间&#xff0c;删也删不掉&#xff0c;咋办&#xff1f;不要紧&#xff0c;下面大神来教你神操作&#xff01;&#xff01;&#xff01;1、打开“计算机”&#xff0c;选择…

hdu3635 Dragon Balls(带权并查集)

1 /*2 题意&#xff1a;有N个城市&#xff0c; 每一个城市都有一个龙珠&#xff08;编号与城市的编号相同&#xff09;&#xff0c;有两个操作3 T A ,B 将标号为A龙珠所在城市的所有的龙珠移动到B龙珠所在城市中&#xff01; 4 5 思路&#xff1a;并查集 &#xff…

backupexec mysql_MySQL备份可能遇到的坑

MySQL备份工具&#xff0c;支持各种参数选项&#xff0c;使用不同的选项极有可能影响备份处理过程。本文使用我们常规认为合理的备份参数&#xff0c;测试/验证是否存在容易忽视的坑# 常规备份参数# mysqldumpshell> mysqldump --single-transaction --master-data2 -B repl…

win10虚拟机服务器错误怎么解决方法,虚拟机下安装win10系统后出现升级报错故障的解决方法【图文】...

现在的win10还是很挑系统的&#xff0c;兼容性有待进一步增强。有些在虚拟机环境下安装了win10的小伙伴&#xff0c;升级是很可能报以下错误的&#xff0c;升级你的ESX版本吧&#xff0c;5.5以下升级win10基本都是没戏的。VM workstation11以上是明确支持win10。不能升级win10怎…

hdu1962Corporative Network带权回路

1 /*2 有N个企业&#xff0c;每个企业想要实现通信&#xff0c;要用线路来连接&#xff0c;线路的长度为abs(a-b)%1000;3 如果企业a 链接到了企业b 那么b就是the center of the serving!4 然后有两种操作&#xff1a;5 E a &#xff1a; 输出企业a到serving ce…

mysql客户端修改sqlmode_MySQL修改sql_mode

一 ERR 1067引发的血案今天在Navicat中运行sql语句创建数据表出现了错误Err 1067。而这条语句在有些同事的mysql上是正确的&#xff0c;但是在有些人那里就报错。QQ截图20170811143551.png原因竟然是timestamp的默认值不正确。查阅资料得知&#xff0c;mysql5.7版本中有了一个S…

零基础mysql项目实例_MySQL-零基础开发

1.终端下连接mysql服务mysql -uroot -p回车后输入设定的密码即可。进去后每条命令结尾要带分号&#xff1b;退出命令exit单行注释有两种&#xff1a;#  或 --空格。多行注释/*  */2.基本命令集合针对数据库&#xff1a;use sys;  show databases;查看当前操作的数据库&a…

hdu2066一个人的旅行(多源点多汇点的最短路径问题)

&#xff0f;&#xff0a;思路&#xff1a;多源点&#xff0c;多会点的最短路径&#xff01;将最小号&#xff0d;&#xff11;的节点但最源点&#xff0c;将最大号&#xff0b;&#xff11;的点当作汇点&#xff01;将问题转变成从一个源点到一个汇点的最短路径的问题&#xf…

php设置mysql 编码_php怎么设置mysql编码?

在php中&#xff0c;可以使用mysql_query()函数来设置mysql编码&#xff0c;语法“mysql_query(SET NAMES 编码方式);”&#xff1b;mysql_query()函数需要放置在mysql_connect()语句之后。在php中&#xff0c;可以使用mysql_query()函数来设置mysql编码。在PHP连接数据库的时候…

nyoj 925 国王的烦恼(最小生成树)

1 /*2 题意&#xff1a;N个城市中每两个城市有多条路径连接&#xff0c;可是因为路径存在的天数是有限的&#xff01;以为某条路经不存在了3 导致N个城市不能连通了&#xff0c;那么村名们就会抗议&#xff01;问一共会有多少次抗议&#xff01;4 5 思路&#…

golang 切片 接口_Go编程模式:切片,接口,时间和性能

在本篇文章中&#xff0c;我会对 Go 语言编程模式的一些基本技术和要点&#xff0c;这样可以让你更容易掌握 Go 语言编程。其中&#xff0c;主要包括&#xff0c;数组切片的一些小坑&#xff0c;还有接口编程&#xff0c;以及时间和程序运行性能相关的话题。本文是全系列中第 1…