ArrayList上使用泛型

步骤 1 : 泛型 Generic

不指定泛型的容器,可以存放任何类型的元素

指定了泛型的容器,只能存放指定类型的元素以及其子类

package property;

public class Item {
String name;
int price; public Item(){ } //提供一个初始化name的构造方法
public Item(String name){
this.name = name;
} public void effect(){
System.out.println("物品使用后,可以有效果");
} }
package collection; import java.util.ArrayList;
import java.util.List; import property.Item;
import charactor.APHero;
import charactor.Hero; public class TestCollection { public static void main(String[] args) { //对于不使用泛型的容器,可以往里面放英雄,也可以往里面放物品
List heros = new ArrayList(); heros.add(new Hero("盖伦")); //本来用于存放英雄的容器,现在也可以存放物品了
heros.add(new Item("冰杖")); //对象转型会出现问题
Hero h1= (Hero) heros.get(0);
//尤其是在容器里放的对象太多的时候,就记不清楚哪个位置放的是哪种类型的对象了
Hero h2= (Hero) heros.get(1); //引入泛型Generic
//声明容器的时候,就指定了这种容器,只能放Hero,放其他的就会出错
List<Hero> genericheros = new ArrayList<Hero>();
genericheros.add(new Hero("盖伦"));
//如果不是Hero类型,根本就放不进去
//genericheros.add(new Item("冰杖")); //除此之外,还能存放Hero的子类
genericheros.add(new APHero()); //并且在取出数据的时候,不需要再进行转型了,因为里面肯定是放的Hero或者其子类
Hero h = genericheros.get(0); } }

步骤 2 : 泛型的简写

为了不使编译器出现警告,需要前后都使用泛型,像这样:

List<Hero> genericheros = new ArrayList<Hero>();

不过JDK7提供了一个可以略微减少代码量的泛型简写方式

List<Hero> genericheros2 = new ArrayList<>();

后面的泛型可以用<>来代替

package collection;

import java.util.ArrayList;
import java.util.List; import charactor.Hero; public class TestCollection { public static void main(String[] args) {
List<Hero> genericheros = new ArrayList<Hero>();
List<Hero> genericheros2 = new ArrayList<>(); } }

练习支持泛型的ArrayList

借助泛型和前面学习的面向对象的知识,设计一个ArrayList,使得这个ArrayList里,又可以放Hero,又可以放Item,但是除了这两种对象,其他的对象都不能放

答案 :

首先创建一个接口 LOL,不需要在其中声明任何方法

接着让Hero和Item都实现LOL接口

最后,声明一个ArrayList的变量lolList,它的泛型是

List<LOL> lolList = new ArrayList<>();

这样在lolList中就即放Hero对象,又放Item对象了。

Java自学-集合框架 泛型Generic的更多相关文章

  1. java习题-集合框架-泛型

    集合框架 一 去除List集合中的重复元素. 思路: 1,先创建一个临时容器.用于存储唯一性的元素.2,遍历原容器,将遍历到的元素到临时容器中去判断,是否存在.3,如果存在,不存储到临时容器,如果不存 ...

  2. Java自学-集合框架 Collections

    Java集合框架 工具类Collections Collections是一个类,容器的工具类,就如同Arrays是数组的工具类 步骤 1 : 反转 reverse 使List中的数据发生翻转 pack ...

  3. Java自学-集合框架 Collection

    Java集合框架 Collection Collection是一个接口 步骤 1 : Collection Collection是 Set List Queue和 Deque的接口 Queue: 先进 ...

  4. Java自学-集合框架 HashSet

    Java集合框架 HashSet 示例 1 : 元素不能重复 Set中的元素,不能重复 package collection; import java.util.HashSet; public cla ...

  5. Java自学-集合框架 HashMap

    Java集合框架 HashMap 示例 1 : HashMap的键值对 HashMap储存数据的方式是-- 键值对 package collection; import java.util.HashM ...

  6. Java自学-集合框架 二叉树

    Java集合框架 二叉树 示例 1 : 二叉树概念 二叉树由各种节点组成 二叉树特点: 每个节点都可以有左子节点,右子节点 每一个节点都有一个值 package collection; public ...

  7. Java自学-集合框架 LinkedList

    Java集合框架 LinkedList 序列分先进先出FIFO,先进后出FILO FIFO在Java中又叫Queue 队列 FILO在Java中又叫Stack 栈 示例 1 : LinkedList ...

  8. Java自学-集合框架 与数组的区别

    Java集合框架与数组的区别 示例 1 : 使用数组的局限性 如果要存放多个对象,可以使用数组,但是数组有局限性 比如 声明长度是10的数组 不用的数组就浪费了 超过10的个数,又放不下 //Test ...

  9. java学习——集合框架(泛型,Map)

    泛型: ... Map:一次添加一对元素.Collection 一次添加一个元素. Map也称为双列集合,Collection集合称为单列集合. 其实map集合中存储的就是键值对. map集合中必须保 ...

随机推荐

  1. jsp表单更新数据库

    和插入语句相似,表单传值,在另一个页面接收数据并连接数据库进行更新: 语句如下: <% request.setCharacterEncoding("UTF-8"); Stri ...

  2. gzip格式分析与识别

    " 介绍gzip格式,识别gzip压缩的数据流量." 在协议分析过程中,经常会发现gzip压缩的数据,例如在HTTP协议中,在HTTP头中会标示,内容编码为gzip.DEFLATE ...

  3. Linux中fdisk分区

    一.硬盘接口    从整体的角度上,硬盘接口分为IDE.SATA.SCSI和SAS四种,IDE接口硬盘多用于家用产品中,也部分应用于服务器,SCSI接口的硬盘则主要应用于服务器市场,而SAS只在高端服 ...

  4. 实时数据推送webSocket

    实时数据推送 在Web或移动项目中,服务器向客户端实时推送消息是一种常见的业务需求. 实现方式 Polling:轮询(俗称“拉”),即定期重新请求数据. Long-Polling:长轮询,是 Poll ...

  5. linux查询及添加用户

    1.查询用户. 存储帐号的文件:/etc/passwd 存储密码的文件:/etc/shadow Cat  /etc/passwd Cat  /etc/shadow 2.添加用户 输入命令: usera ...

  6. [日常] 小白来装机基本概念BIOS与硬盘分区

    这两天因为在linux进行测试,先是搞坏了linux的系统,然后在重装linux系统后搞坏了引导.在修复引导的过程中,搞坏了本机的win8系统,再次修复引导与重装linux后,linux可以访问了,w ...

  7. 自动化测试中执行JS脚本方法封装

    执行JS脚本方法封装: class JavaScript(Base): def execute_javascript(self, js): """执行 JavaScrip ...

  8. nginx常规扩展功能

    功能 语法 配置位置 配置举例 结果验证 备注 文件读取 sendfile on|off ===>(提高读取静态文件效率.直接通过系统内核将文件放入socket,不必再打开一遍) http.se ...

  9. 面向过程编程&面向对象编程

    面向过程编程 Procedure Oriented Programming C语言是面向过程编程的,面向过程编程主要使用顺序.条件选择.循环三种基本结构来编写程序. 顺序:按照时间轴顺序完成每个处理: ...

  10. c# WF 第10节 textbox 控件

    本节内容: 1:textbox 在哪里 2:textbox 的属性 1:textbox 在哪里 2:textbox 的属性 3:实例 实现如下: 步骤1 :7个label  2个textbox 步骤2 ...