集合泛型知识
泛型
是一种把类型明确工作推迟到创建对象或者调用方法的时候才明确的特殊类型。
也称参数化类型,把类型当成参数传递。
在jdk1.5中出现。一般来说经常在集合中使用。
-
格式
<数据类型>
此处的数据类型只能是引用类型
-
好处
1.把运行期间的问题提前到编译时期。
2.避免了强制类型转换。
3.优化了程序,解决了警告。
-
泛型产生原因
早期,Java中使用Object来表示所有类型。向上转型没有问题,但是在向下转型的时候隐含了类型转换问题。
也即是说,这样的程序是不安全的。所以在Java的JDK5以后引入了泛型,提高了程序安全性。
-
泛型的应用
-
泛型类
把泛型定义在类中
格式:public class 类名<泛型类型1,…>(表明可定义多个泛型类型,每个类型之间用逗号隔开。)
public class objectTool<T>{ private T obj; public T getObj(){ return obj; } public void setObj(){ this.obj = obj; } }
-
泛型方法
把泛型定义在方法上
格式:public <泛型类型> 返回类型 方法名(泛型类型);
public <T> void show(T t){ System.out.println(t); }
-
泛型接口
把泛型定义在接口上
格式:public interface 接口名<泛型类型1,…>
interface Inter<T>{ public abstract void show(T t); } //实现接口 //1.知道要用什么类型 //class InterImpl implements Inter<String>{ // // @Override // public void show(String t) { // System.out.println(t); // } //} //2.不知道要用什么类型 class InterImpl<T> implements Inter<T>{ @Override public void show(T t) { System.out.println(t); } }
-
-
泛型高级之通配符
泛型如果明确的写出,则前后必须一致
class Animal { } class Dog extends Animal{ } class Cat extends Animal{ }
-
?
表示任意类型,如果没有明确那么就是Object及Java任意类
Collection<?> c1 = new ArrayList<Object>(); Collection<?> c2 = new ArrayList<Animal>(); Collection<?> c3 = new ArrayList<Dog>(); Collection<?> c4 = new ArrayList<Cat>();
-
?extends E
向下限定,E及其子类
Collection<? extends Animal> a1 = new ArrayList<Animal>(); Collection<? extends Animal> a2 = new ArrayList<Dog>(); Collection<? extends Animal> a3 = new ArrayList<Cat>();
-
?super E
向上限定,E及其父类
Collection<? super Animal> b1 = new ArrayList<Animal>(); Collection<? super Animal> b2 = new ArrayList<Object>();
-