泛型的常见用法与注意事项
泛型 | 非泛型 |
---|---|
1、避免了类型装换的麻烦;储存的是什么类型就只能使用该类型 ;2、把运行时的异常提升到了编译器 | 不用泛型,集合属于object类型可以使用任意类型 |
泛型是什么类型就只能储存什么类型的数据 | 不安全,会引发异常 |
泛型接口的第一种使用方式(直接通过实现类继承时选择泛型的类型)
package cn.itcase.day26.demo01.demo02.demo02;
public class Demo01Generic {
public static void main(String[] args) {
GenericInterfaceimpl1 gi = new GenericInterfaceimpl1();
gi.method1("艾弗森");
}
}
package cn.itcase.day26.demo01.demo02.demo02;
public interface GenericInterface<I> {
public abstract void method1(I i);
}
package cn.itcase.day26.demo01.demo02.demo02;
public class GenericInterfaceimpl1 implements GenericInterface<String>{
@Override
public void method1(String s) {
System.out.println(s);
}
}
泛型接口的第二种使用方法(在实现类中还是使用泛型,等到创建对象时再确认要是的数据类型)
package cn.itcase.day26.demo01.demo02.demo02;
public class Demo01Generic {
public static void main(String[] args) {
/*GenericInterfaceimpl1 gi = new GenericInterfaceimpl1();
gi.method1("艾弗森");*/
GenericInterfaceipml2<Integer> gi = new GenericInterfaceipml2<>();
gi.method1(123124);
}
}
package cn.itcase.day26.demo01.demo02.demo02;
public class GenericInterfaceipml2<M> implements GenericInterface<M> {
@Override
public void method1(M m) {
System.out.println(m);
}
}
package cn.itcase.day26.demo01.demo02.demo02;
public interface GenericInterface<I> {
public abstract void method1(I i);
}
泛型的上限限定与下限限定;
Integer extent Number extent Object
上限限定:使用的泛型只能是E类的子类或本身;
下限限定:使用的泛型只能是E类的父类或本身;