本视频是解读性视频,所以希望您已经看过了本知识点的内容,并且编写了相应的代码之后,带着疑问来观看,这样收获才多。 不建议一开始就观看视频
![]() 5分55秒 本视频采用html5方式播放,如无法正常播放,请将浏览器升级至最新版本,推荐火狐,chrome,360浏览器 如果装有迅雷,播放视频呈现直接下载状态,请调整 迅雷系统设置-基本设置-启动-监视全部浏览器 (去掉这个选项) 步骤 1 : 泛型 Generic 步骤 2 : 泛型的简写 步骤 3 : 泛型的系统学习 步骤 4 : 练习-支持泛型的ArrayList 步骤 5 : 答案-支持泛型的ArrayList
不指定泛型的容器,可以存放任何类型的元素
指定了泛型的容器,只能存放指定类型的元素以及其子类 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);
}
}
为了不使编译器出现警告,需要前后都使用泛型,像这样:
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<>();
}
}
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里,又可以放Hero,又可以放Item,但是除了这两种对象,其他的对象都不能放
在查看答案前,尽量先自己完成,碰到问题再来查看答案,收获会更多
本视频是解读性视频,所以希望您已经看过了本答案的内容,带着疑问来观看,这样收获才多。 不建议一开始就观看视频
![]() 3分1秒 本视频采用html5方式播放,如无法正常播放,请将浏览器升级至最新版本,推荐火狐,chrome,360浏览器 如果装有迅雷,播放视频呈现直接下载状态,请调整 迅雷系统设置-基本设置-启动-监视全部浏览器 (去掉这个选项)
首先创建一个接口 LOL,不需要在其中声明任何方法
接着让Hero和Item都实现LOL接口 最后,声明一个ArrayList的变量lolList,它的泛型是<LOL> List<LOL> lolList = new ArrayList<>(); 这样在lolList中就即放Hero对象,又放Item对象了。 package charactor;
public interface LOL {
}
package charactor;
public class Hero implements LOL {
public String name;
public float hp;
public int damage;
public Hero() {
}
public Hero(String name) {
this.name = name;
}
public String toString() {
return name;
}
}
package property;
import charactor.LOL;
public class Item implements LOL {
String name;
int price;
public Item(){
}
public Item(String name){
this.name = name;
}
public void effect(){
System.out.println("物品使用后,可以有效果");
}
public boolean disposable() {
return false;
}
}
package collection;
import java.util.ArrayList;
import java.util.List;
import charactor.GiantDragon;
import charactor.Hero;
import charactor.LOL;
import property.Item;
public class TestCollection {
public static void main(String[] args) {
List<LOL> lolList = new ArrayList<>();
lolList.add( new Hero("盖伦")); //能放Hero
lolList.add( new Item("血瓶")); //也能放Item
lolList.add(new GiantDragon()); // GiantDragon即不是Hero也不是Item
}
}
HOW2J公众号,关注后实时获知布最新的教程和优惠活动,谢谢。
![]()
问答区域
2018-01-11
关于练习题的思路
1 个答案
除夕宝宝 答案时间:2018-03-06 视频最后那个学员说的就是你这个意思,可惜最后被切了。没讲可不可以
2018-01-11
关于练习题的思路
2017-10-15
上面说泛型可以放入类型的子类,实现了接口的类 也相当子类吗?
2017-08-21
练习相关问题
2017-08-18
练习问题
2017-08-15
泛型 简写
提问之前请登陆 |