本视频是解读性视频,所以希望您已经看过了本知识点的内容,并且编写了相应的代码之后,带着疑问来观看,这样收获才多。 不建议一开始就观看视频
3分22秒 本视频采用html5方式播放,如无法正常播放,请将浏览器升级至最新版本,推荐火狐,chrome,360浏览器。 如果装有迅雷,播放视频呈现直接下载状态,请调整 迅雷系统设置-基本设置-启动-监视全部浏览器 (去掉这个选项)。 chrome 的 视频下载插件会影响播放,如 IDM 等,请关闭或者切换其他浏览器 示例 1 : 不使用泛型 示例 2 : 使用泛型 示例 3 : 子类对象 示例 4 : 泛型的简写 示例 5 : 练习-泛型 示例 6 : 答案-泛型
不使用泛型带来的问题
ADHero(物理攻击英雄) APHero(魔法攻击英雄)都是Hero的子类 ArrayList 默认接受Object类型的对象,所以所有对象都可以放进ArrayList中 所以get(0) 返回的类型是Object 接着,需要进行强制转换才可以得到APHero类型或者ADHero类型。 如果软件开发人员记忆比较好,能记得哪个是哪个,还是可以的。 但是开发人员会犯错误,比如第20行,会记错,把第0个对象转换为ADHero,这样就会出现类型转换异常 package generic;
import java.util.ArrayList;
import charactor.ADHero;
import charactor.APHero;
public class TestGeneric {
public static void main(String[] args) {
ArrayList heros = new ArrayList();
heros.add(new APHero());
heros.add(new ADHero());
APHero apHero = (APHero) heros.get(0);
ADHero adHero = (ADHero) heros.get(1);
ADHero adHero2 = (ADHero) heros.get(0);
}
}
使用泛型的好处:
泛型的用法是在容器后面添加<Type> Type可以是类,抽象类,接口 泛型表示这种容器,只能存放APHero,ADHero就放不进去了。 package generic;
import java.util.ArrayList;
import charactor.APHero;
public class TestGeneric {
public static void main(String[] args) {
ArrayList<APHero> heros = new ArrayList<APHero>();
//只有APHero可以放进去
heros.add(new APHero());
//ADHero甚至放不进去
//heros.add(new ADHero());
//获取的时候也不需要进行转型,因为取出来一定是APHero
APHero apHero = heros.get(0);
}
}
假设容器的泛型是Hero,那么Hero的子类APHero,ADHero都可以放进去
和Hero无关的类型Item还是放不进去 package generic;
import java.util.ArrayList;
import property.Item;
import charactor.ADHero;
import charactor.APHero;
import charactor.Hero;
public class TestGeneric {
public static void main(String[] args) {
ArrayList<Hero> heros = new ArrayList<Hero>();
//只有作为Hero的子类可以放进去
heros.add(new APHero());
heros.add(new ADHero());
//和Hero无关的类型Item还是放不进去
//heros.add(new Item());
}
}
为了不使编译器出现警告,需要前后都使用泛型,像这样:
ArrayList<Hero> heros = new ArrayList<Hero>(); 不过JDK7提供了一个可以略微减少代码量的泛型简写方式 ArrayList<Hero> heros2 = new ArrayList<>(); 后面的泛型可以用<>来代替,聊胜于无吧 package generic;
import java.util.ArrayList;
import charactor.Hero;
public class TestGeneric {
public static void main(String[] args) {
ArrayList<Hero> heros = new ArrayList<Hero>();
//后面可以只用<>
ArrayList<Hero> heros2 = new ArrayList<>();
}
}
package generic; import java.util.ArrayList; import charactor.Hero; public class TestGeneric { public static void main(String[] args) { ArrayList<Hero> heros = new ArrayList<Hero>(); //后面可以只用<> ArrayList<Hero> heros2 = new ArrayList<>(); } }
根据数字类的知识,设计一个集合,这个集合里即可以放整数,也可以放浮点数,但是不能放字符串
在查看答案前,尽量先自己完成,碰到问题再来查看答案,收获会更多
本视频是解读性视频,所以希望您已经看过了本答案的内容,带着疑问来观看,这样收获才多。 不建议一开始就观看视频
42秒 本视频采用html5方式播放,如无法正常播放,请将浏览器升级至最新版本,推荐火狐,chrome,360浏览器。 如果装有迅雷,播放视频呈现直接下载状态,请调整 迅雷系统设置-基本设置-启动-监视全部浏览器 (去掉这个选项)。 chrome 的 视频下载插件会影响播放,如 IDM 等,请关闭或者切换其他浏览器
泛型使用Number, 就可以放所有Number的子类,比如Integer,Float,Double
但是不能放String package generic;
import java.util.ArrayList;
public class TestGeneric {
public static void main(String[] args) {
ArrayList<Number> numbers = new ArrayList<>();
numbers.add(123);//int
numbers.add(123f);//float
numbers.add(123d);//double
numbers.add("String");
}
}
package generic; import java.util.ArrayList; public class TestGeneric { public static void main(String[] args) { ArrayList<Number> numbers = new ArrayList<>(); numbers.add(123);//int numbers.add(123f);//float numbers.add(123d);//double numbers.add("String"); } }
HOW2J公众号,关注后实时获知最新的教程和优惠活动,谢谢。
问答区域
2022-06-07
答案
7 个答案
木宇 跳转到问题位置 答案时间:2024-07-10 打卡
实习英雄 跳转到问题位置 答案时间:2023-12-21 import java.util.ArrayList;
public class NumberCollection {
public static void main(String[] args) {
// 创建一个只能存放Number类型对象的ArrayList
ArrayList<Number> numbers = new ArrayList<>();
// 添加整数(Integer)和浮点数(Double)
numbers.add(5); // 自动装箱为Integer
numbers.add(3.14); // 自动装箱为Double
// 如果尝试添加字符串,下面这行将在编译时报错
// numbers.add("字符串"); // 编译错误
// 输出集合内容
for (Number num : numbers) {
System.out.println(num);
}
}
}
hhh1996 跳转到问题位置 答案时间:2023-08-21 List<Number> list= new ArrayList<>();
list.add(11);
list.add(11.1);
//list.add("11");
LUO萝北 跳转到问题位置 答案时间:2023-04-27 List<Number> list = new ArrayList<>();
314115926 跳转到问题位置 答案时间:2023-03-13 cwhandlfz 跳转到问题位置 答案时间:2023-02-02 ArrayList<Number> numbers= new ArrayList<>();
wanliu 跳转到问题位置 答案时间:2023-01-23 List<Number> numbers= new ArrayList<>();
回答已经提交成功,正在审核。 请于 我的回答 处查看回答记录,谢谢
2022-05-13
为什么这么写不对,是我想复杂了吗
3 个答案
晚安嘛 跳转到问题位置 答案时间:2024-03-27 参数加一个Object O,把要加的数据类型传到这里判断
wr123 跳转到问题位置 答案时间:2023-11-15 import java.io.File;
import java.util.*;
public class Main {
public static void main(String[] args) {
List<Number> number= new ArrayList<>();
number.add(11);
number.add(11.1);
//list.add("11");//报错显示,string类型不符合
}
}
多姆达 跳转到问题位置 答案时间:2022-06-05 貌似是因为空参构造不行,把 I 和 F 加进去之后能跑了
回答已经提交成功,正在审核。 请于 我的回答 处查看回答记录,谢谢
2021-01-07
大佬 咱过来也只是学习的 请把F12的屏蔽解开 这个也只是前端的简单处理下 还是可以看到的 好的方案建议把视频地址做成动态的
2021-01-07
大佬要收费直接把视频做了点击再给出视频地址嘛 ,别直接做个隐藏一下就找到了 没意义
2020-07-10
答案
提问太多,页面渲染太慢,为了加快渲染速度,本页最多只显示几条提问。还有 6 条以前的提问,请 点击查看
提问之前请登陆
提问已经提交成功,正在审核。 请于 我的提问 处查看提问记录,谢谢
|