how2j.cn

本视频是解读性视频,所以希望您已经看过了本知识点的内容,并且编写了相应的代码之后,带着疑问来观看,这样收获才多。 不建议一开始就观看视频



5分55秒
本视频采用html5方式播放,如无法正常播放,请将浏览器升级至最新版本,推荐火狐,chrome,360浏览器。 如果装有迅雷,播放视频呈现直接下载状态,请调整 迅雷系统设置-基本设置-启动-监视全部浏览器 (去掉这个选项)。 chrome 的 视频下载插件会影响播放,如 IDM 等,请关闭或者切换其他浏览器



步骤 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("物品使用后,可以有效果"); } }
为了不使编译器出现警告,需要前后都使用泛型,像这样:
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<>(); } }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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<>();
      
    }
       
}
步骤 3 :

泛型的系统学习

edit
泛型的知识还包含 支持泛型的类 泛型转型 通配符 这些内容都在泛型章节详细展开
步骤 4 :

练习-支持泛型的ArrayList

edit  姿势不对,事倍功半! 点击查看做练习的正确姿势
借助泛型和前面学习的面向对象的知识,设计一个ArrayList,使得这个ArrayList里,又可以放Hero,又可以放Item,但是除了这两种对象,其他的对象都不能放
步骤 5 :

答案-支持泛型的ArrayList

edit
在查看答案前,尽量先自己完成,碰到问题再来查看答案,收获会更多
在查看答案前,尽量先自己完成,碰到问题再来查看答案,收获会更多
在查看答案前,尽量先自己完成,碰到问题再来查看答案,收获会更多
查看本答案会花费4个积分,您目前总共有点积分。查看相同答案不会花费额外积分。 积分增加办法 或者一次性购买JAVA 中级总计0个答案 (总共需要0积分)
查看本答案会花费4个积分,您目前总共有点积分。查看相同答案不会花费额外积分。 积分增加办法 或者一次性购买JAVA 中级总计0个答案 (总共需要0积分)
账号未激活 账号未激活,功能受限。 请点击激活


HOW2J公众号,关注后实时获知最新的教程和优惠活动,谢谢。


问答区域    
2022-02-26 答案
木木12




111111111


3 个答案

木宇
答案时间:2024-07-09
打卡 思路一个父类两个子类

wr123
答案时间:2023-11-23
package ArrayList; import charactor.Hero; import property.Item; import java.util.ArrayList; public class MyArrayList extends ArrayList { @Override public boolean add(Object o) { if ((o instanceof Hero) || (o instanceof Item)) { return super.add(o); } else { System.out.println("所添加的类不符合要求,请选择Hero或者Item对象添加"); return false; } } @Override public void add(int index, Object element) { if ((element instanceof Hero) || (element instanceof Item)) { super.add(index, element); } else System.out.println("该对象不是Hero或者Item及其子类,添加失败"); } } 测试 package collection; import java.util.ArrayList; import ArrayList.MyArrayList; import charactor.Hero; import property.Item; public class TestCollection { public static void main(String[] args) { MyArrayList myArrayList=new MyArrayList(); Hero hero=new Hero("盖伦"); Item item=new Item("红水晶"); MyArrayList lgu=new MyArrayList(); //用于验证 System.out.println(myArrayList.add(hero)); System.out.println(myArrayList.add(item)); System.out.println(myArrayList.add(lgu)); System.out.println(myArrayList.toString()); } }

zhushu
答案时间:2022-11-17
和我想的类似。设计一个父类作为hero和item的父类。然后arrayList后面的类型为父类。这样合理不?



回答已经提交成功,正在审核。 请于 我的回答 处查看回答记录,谢谢


2021-07-06 我的答案
Amanda




我的答案啊


3 个答案

zjlilil
答案时间:2023-04-14
这个类继承了ArrayList类,并重写了add方法。在add方法中,判断传入的对象是否为String或Integer类型,如果是,则调用父类的add方法添加到ArrayList中;否则抛出异常。这样就实现了只能存放String和Integer类型数据的ArrayList。

蔚蓝天空157
答案时间:2022-08-07
妙蛙!

theCarrot
答案时间:2022-02-24
太牛了



回答已经提交成功,正在审核。 请于 我的回答 处查看回答记录,谢谢


2021-06-22 练习-支持泛型的ArrayList
2021-01-25 Lists.newArrayList()也行
2020-11-05 答案一:继承ArrayList,再重写方法add 实现了要求


提问太多,页面渲染太慢,为了加快渲染速度,本页最多只显示几条提问。还有 20 条以前的提问,请 点击查看

提问之前请登陆
提问已经提交成功,正在审核。 请于 我的提问 处查看提问记录,谢谢