Java自学-集合框架 泛型Generic

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 genericheros = new ArrayList();
genericheros.add(new Hero("盖伦"));
//如果不是Hero类型,根本就放不进去
//genericheros.add(new Item("冰杖"));

//除此之外,还能存放Hero的子类
genericheros.add(new APHero());

//并且在取出数据的时候,不需要再进行转型了,因为里面肯定是放的Hero或者其子类
Hero h = genericheros.get(0);

}

}

步骤 2 : 泛型的简写

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

List genericheros = new ArrayList();

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

List 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 genericheros = new ArrayList();
List genericheros2 = new ArrayList<>();

}

}

练习支持泛型的ArrayList

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

答案 :

首先创建一个接口 LOL,不需要在其中声明任何方法
接着让Hero和Item都实现LOL接口
最后,声明一个ArrayList的变量lolList,它的泛型是

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

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

posted on 2019-11-08 10:22  半米高峰  阅读(448)  评论(1)    收藏  举报

导航