---------------------- android培训、java培训、期待与您交流! ----------------------
泛型时Java在1.5版本以后出现的新特性,侧重于解决安全问题,泛型的本质是参数化类型,也就是所操作的数据类型被指定为一种参数类型,使用泛型的时候就可以在编译时期检查参数类型安全,并且所有的强制转换都是自动和隐式的,提高代码重用率。
不使用泛型声明List集合:
List l=new ArrayList();
l.add(4);
Integer i=(Integer)l.get(0);
使用泛型声明List集合:
List<Integer> l=new ArrayList<Integer>();
l.add(4);
Integer i=l.get(0);
明显在使用泛型后,类型转换不在需要自己手动操作,而且<>中的参数类型只能是类类型(包括自定义类),泛型类型可以是多个,在map集合声明时就可以使用Map<String,String>,泛型可以定义在类上,方法或者静态方法上。当类要操作的引用数据类型不明确时,定义泛型来进行扩展,当类被泛型定义后,是在整个类中有效的,如果被方法使用,当类对象确定操作的数据类型时方法的数据类型也随之确定,造成了局限性。为了让不同的方法操作不同的类型,可以将泛型定义在方法上。
class Demo<T>//定义一个指定泛型的类
{
public <T> void show(T t)//show方法使用的泛型和类泛型相同的
{
System.out.println(t);
}
public <W> void print(W w)//print方法使用自己独立的泛型。
{
System.out.println(w);
}
public static <Q> void show1(Q q)//如果静态方法操作的应用数据不确定,要在静态方法上定义泛型,不可以访问类上定义的泛型
{
System.out.println(q);
}
}
在使用泛型时,当方法所调用的对象泛型类型不明确时,可以使用? 通配符,也可以理解为占位符,public void show(ArrayList<?> al)代表可以接受使用任何泛型类型的ArrayList对象作为参数运行。使用自定义的类作为泛型类型时,有一些泛型的限定可以使用,比如,? extends E:可以接受E类型以及E的所有子类类型;?super E:可以接受E类型以及E的父类型。在Java中使用泛型最多的是集合框架,改善集合类的安全性是泛型的主要动机,而标准集合类接口也都泛型化了,在集合类之外,也有一些类使用到了泛型,之前接触到的一些使用过泛型的地方,Comparable<T>以及Comparator<T>这两个接口也用到了泛型。
自定义泛型方法,用于放置泛型的类型参数的尖括号应出现在方法的其他所有修饰符之后和方法的返回值类型之前,按照惯例,类型参数通常用单个大写字母表示,而且只能是引用类型才能作为泛型方法的实际参数,除了在应用泛型时可以使用extends限定符,在定义泛型时也可以使用extends限定符,并且可以用&来指定多个边界。普通方法,构造方法和静态方法都可以使用泛型,数组型的数据不能使用参数化的数据。
public static <T> T add(T x, T y)
{
return y;
}
自定义泛型类,如果类的实例对象中多处都要用到同一个泛型参数,即这些地方引用的泛型类型要保持同一实际类型时,这时候就该定义类级别的泛型,类级别的泛型是根据引用该类名时指定的类型信息来参数化类型变量。Generic<String> g1=null;如果存在静态方法,该自己定义泛型而不是与本类泛型一致。
public class Generic<T>
{
private T field1;
public void show(T obj){}
}
---------------------- android培训、 java培训、期待与您交流! ----------------------详细请查看: http://edu.csdn.net/heima