---------------------- ASP.Net+Android+IO开发S、.Net培训、期待与您交流! ----------------------
一 泛型 generic(通用)
1 1.5版本的新特性用于解决安全问题。
2 将运行时期出现的问题 ClassCastExcepion转移到了编译时期,方便了程序员解决问题。
3 好处是提高了扩展性,但坏处是不能用类型的特有方法
二 泛型前后的对比
class Student
{}
class Worker
{}
泛型前
class Tool
{
Private Object obj;
public void setObject(Object obj)
{
this.obj=obj;
}
public Object getObject();
{
return obj;
}
}
泛型后
class Tool<Q>
{
private QQ q;
public void setObject(QQ q)
{
this.q=q;
}
public QQ getObject()
{
return q;
}
}
三 泛型在方法上的定义
class Demo<T>
{
public void show(T t)
{}
Public <Q> void print<Q q>
{}
public static <W> void haha<W w>
{}//注意:1 静态方法不可以访问类上定义的泛型,
2 如何静态方法操作的引用数据类型不确定是,可以将泛型定义在方法上。
}
四 通配符
1 通配符 “?” 也可以理解为占位符。代表任意范围
class Test
{
public static void main(String[] args)
{
ArrayList<Integer> ali=new ArrayList<Integer>();
ArrayList<String> al=new ArrayList<String>();
methed_1(al);
}
public static void methed_1(Collection<? > t)//好处,能够将属于同一个体系里面的类的共性方法提取出来,简化了代码的书写,又能够保证数据的安全。不足之处就是只能够打印?这歌类型,并且在函数里面只能够条用?类型的方法。
{
Iterator<? > it=t.iterator();
while(it.hasNext())
{
System.out.println(it.next());
}
}
}
2 泛型的限定(对接收的范围进行了限定)
a 注意;泛型的两边加的必须一样。
b ? extends E;表示能够接收E或者是E的子类,称为上限。
c ? super E:表示能够接受E类型或者E的父类,成为下限。
d 关于上限例子的部分代码
public static void methed_1(Collection<? extends Person> t)//好处就是能够给泛型加一个范围,
{
Iterator<? extends Person> it=t.iterator();
while(it.hasNext())
{
System.out.println(it.next().getAge()+"1");
}
}