Java自学-泛型 集合中的泛型
什么是 泛型?
示例 1 : 不使用泛型
不使用泛型带来的问题
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); } }
示例 2 : 使用泛型
使用泛型的好处:
示例 3 : 子类对象 假设容器的泛型是hero,那么hero的子类aphero,adhero都可以放进去 示例 4 : 泛型的简写 为了不使编译器出现警告,需要前后都使用泛型,像这样: 不过jdk7提供了一个可以略微减少代码量的泛型简写方式 后面的泛型可以用<>来代替
泛型的用法是在容器后面添加
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无关的类型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>();
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<>();
}
}
上一篇: thinkphp论坛项目开发
下一篇: .Net 微服务架构技术栈的那些事