获取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. 接着…

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…

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;选择…

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怎…

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…

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连接数据库的时候…

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

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

poj 3352Road Construction(无向双连通分量的分解)

1 /*2 题意&#xff1a;给定一个连通的无向图G&#xff0c;至少要添加几条边&#xff0c;才能使其变为强连通图&#xff08;指的是边强联通&#xff09;。 3 思路&#xff1a;利用tarjan算法找出所有的双联通分量&#xff01;然后根据low[]值的不同将双联通分量4 进行…

jsp中去掉超链接下划线吗_网页中如何去掉超链接的下划线

展开全部a:link {text-decoration: none;}a:visited {text-decoration: none;color: #6B6C70;}其中的text-decoration: none;是消除下划线例如&#xff1a;只需加入一段代码32313133353236313431303231363533e59b9ee7ad9431333337393534&#xff1a;td,body { font-size: 9pt}a…

mac 爱普生打印机驱动_epson l360 mac版驱动下载-爱普生l360驱动Mac版最新版 - 极光下载站...

爱普生l360驱动苹果电脑版是专为mac用户所设计打造&#xff0c; 当你的电脑中安装了本驱动程序以后&#xff0c;就可以非常轻松的进行操作打印了&#xff0c;与该型号的打印机相匹配&#xff0c;将会带给你最流畅的打印体会&#xff01;爱普生l360打印机介绍--打印质量分辨率可…

raft协议 MySQL 切换_Raft 协议实战系列(二)—— 选主

注&#xff1a;本文原创&#xff0c;转载请标明出处。欢迎转发、关注微信公众号&#xff1a;Q的博客。 不定期发送干货&#xff0c;实践经验、系统总结、源码解读、技术原理。本文目的笔者期望通过系列文章帮助读者深入理解Raft协议并能付诸于工程实践中&#xff0c;同时解读不…

二分匹配最大匹配的理解(附图解)

定义一个PXP的有向图中&#xff0c;路径覆盖就是在图中找一些路径&#xff0c;使之覆盖了图中的所有顶点&#xff0c;且任何一个顶点有且只有一条路径与之关联&#xff1b;&#xff08;如果把这些路径中的每条路径从它的起始点走到它的终点&#xff0c;那么恰好可以经过图中的每…

Floyd算法的理解

转载于:https://www.cnblogs.com/hujunzheng/p/3919226.html

hdu1269迷宫城堡(判断有向图是否是一个强连通图)

1 /* 题意&#xff1a; 给你一个图&#xff0c;求这个有向图示否是一个强连通图&#xff08;每两个节点都是可以相互到达的&#xff09;&#xff01; 思路1&#xff1a;按正向边dfs一遍&#xff0c;将经过的节点计数&#xff0c;如果记录的节点的个数小于…

mgg mysql_mgg文件怎么转换mp3格式?

步骤/方法方法/步骤1:下载载视频转换器&#xff0c;我们说到在官网下载比较好吧。下载完成之后&#xff0c;我们就直接点击进行安装&#xff0c;一般 在安装的过程也是非常快速的&#xff0c;主要是按照安装向导上的步骤进行就可以了。方法/步骤2:安装好之后&#xff0c;我们就…

java dao 泛型的好处_java中泛型有什么作用

泛型的作用如下&#xff1a;1、类型安全泛型的主要目标是提高 Java 程序的类型安全。编译时的强类型检查&#xff1b;通过知道使用泛型定义的变量的类型限制&#xff0c;编译器可以在一个高得多的程度上验证类型假设。没有泛型&#xff0c;这些假设就只存在于程序员的头脑中(或…