使用泛型优点:
1.能够避免在强转时出现问题
import java.util.Collection;
/*
* *ArrayList底层定义:
* class ArrayList<E>{
* boolean add(E e){//使用的E就是ArrayList上的E
public static void main(String[] args) {
//method01();
method02();
}
//不使用泛型
public static void method01(){
Collection c=new ArrayList();//如果不写<>,默认会把泛型变量替换成Object类型
c.add("abc");//形参相当于:Object e="abc"//多态
c.add(3);//首先装箱->new Integer(3),形参相当于:Object e=new Integer(3);//多态
for (Object obj : c) {
if(obj instanceof String){//判断obj指向的对象是否是String类的对象
//第二次循环obj=new Integer(3),不是String类型对象 if结果为false
String str=(String)obj;//第一次循环obj="abc" String str="abc"
System.out.println(str.length());
}
}
}
// 使用泛型
public static void method02() {
Collection<String> c = new ArrayList<String>();
c.add("def");
c.add("a");
// c.add(4);//不能添加4,因为add的方法的形参已经被限定为String
for (Object obj : c) {
//if (obj instanceof String) {//此时不需要判断obj指向的是否是字符串对象
//因为我们已经利用泛型限制存入集合中的都是String类型
String str = (String) obj;// 第一次循环obj="abc" String str="abc"
System.out.println(str.length());
}
}
}
1.能够避免在强转时出现问题
2.我们将运行时可能出现错误(强转错误)提升编译时期,减少安全隐患
import java.util.Collection;
/*
* *ArrayList底层定义:
* class ArrayList<E>{
* boolean add(E e){//使用的E就是ArrayList上的E
*/
public static void main(String[] args) {
//method01();
method02();
}
//不使用泛型
public static void method01(){
Collection c=new ArrayList();//如果不写<>,默认会把泛型变量替换成Object类型
c.add("abc");//形参相当于:Object e="abc"//多态
c.add(3);//首先装箱->new Integer(3),形参相当于:Object e=new Integer(3);//多态
for (Object obj : c) {
if(obj instanceof String){//判断obj指向的对象是否是String类的对象
//第二次循环obj=new Integer(3),不是String类型对象 if结果为false
String str=(String)obj;//第一次循环obj="abc" String str="abc"
System.out.println(str.length());
}
}
}
// 使用泛型
public static void method02() {
Collection<String> c = new ArrayList<String>();
c.add("def");
c.add("a");
// c.add(4);//不能添加4,因为add的方法的形参已经被限定为String
for (Object obj : c) {
//if (obj instanceof String) {//此时不需要判断obj指向的是否是字符串对象
//因为我们已经利用泛型限制存入集合中的都是String类型
String str = (String) obj;// 第一次循环obj="abc" String str="abc"
System.out.println(str.length());
}
}
}