------- android培训、java培训、期待与您交流! ----------
泛型是JDK1.5版本以后出现新特性。用于解决安全问题,是一个类型安全机制。
泛型格式:通过<>来定义要操作的引用数据类型。其实<> 就是用来接收类型的。
当使用集合时,将集合中要存储的数据类型作为参数传递到<>中即可。
好处
1.将运行时期出现问题ClassCastException,转移到了编译时期,方便于程序员解决问题。
2.避免了强制转换麻烦。
例
class GenericDemo
{
public static void main(String[] args)
{
//使该ArrayList中只能存入String
ArrayList<String> al = new ArrayList<String>();
al.add("a5o01");
al.add("ry9u1");
al.add("abcrt4");
//不用泛型下一句就能存入ArrayList,在迭代器中强转成String就会出错
//al.add(4);相当于al.add(new Integer(4))有个自动装箱动作
//迭代器也要记得加上泛型,这样用迭代器操作元素时就不用强转
Iterator<String> it = al.iterator();
while(it.hasNext())
{
String s = it.next();
System.out.println(s+":"+s.length());
}
}
}
泛型类
当类中要操作的引用数据类型不确定的时候使用
P.S.就相当于工具类操作不同的类,这个工具类就要有扩展性,传啥操作啥,早期定义Object来完成扩展,现在定义泛型来完成。
class Cat
{
}
class Dog
{
}
class Utils<A>//泛型类,传啥操作啥
{
private A q;
public void setObject(A q)
{
this.q = q;
}
public A getObject()
{
return q;
}
}
class GenericDemo
{
public static void main(String[] args)
{
Utils<Cat> u = new Utils<Cat>();
u.setObject(new Cat());
Cat c = u.getObject();;
/*
u.setObject(new Dog());
Dog d = u.getObject();//这就不行,工具类对象在建立时明确了操作的是Cat
*/
}
}
泛型类定义的泛型,在整个类中都有效。如果作为参数被方法使用,那么泛型类的对象明确要操作的具体类型后,所有要操作的类型就已经固定了。
方法若要操作其他类型,只能再创建操作其他类型的泛型类对象。
这时为了让不同方法可以操作不同类型,而且类型还不确定。那么可以将泛型定义在方法上(泛型方法)。
public <T> void print(T t)
{
System.out.println("print:"+t);
}
只在方法中有效,传啥操作啥;
注意:泛型方法的泛型放在返回值类型前面;
静态方法不可以访问类上定义的泛型;
如果静态方法操作的应用数据类型不确定,可以将泛型定义在方法上。
泛型也可定义在接口上
泛型限定
<? >通配符。不确定类型;也可以理解为占位符。
<? extends E>: 可以接收E类型或者E的子类型。上限。
<? super E>: 可以接收E类型或者E的父类型。下限
使用泛型限定后操作更为灵活~