------- android培训、java培训、期待与您交流! ----------
泛型:
JDK1.5版本后的新特性,用于解决安全问题,是一个安全机制。
* 好处
* 1,将运行时期出现的问题ClassCastException转移到了编译时期,
* 方便于程序员解决问题,让运行时问题减少
* 2,而且不用强制转换了。
* 泛型的格式:通过<>来定义引用的数据类型
* 什么时候使用泛型呢?
* 通常在集合框架中很常见
* 只要见到<>就要定义泛型
import java.util.*;
class GenericDemo
{
public static void main(String[] args)
{
ArrayList<String> al=new ArrayList<String>();//尖括号的String就是泛型
al.add("fwe3");
al.add("eg35");
//al.add(4);此处如果打开编译时就会出现错误
Iterator<String> it=al.listIterator();
while(it.hasNext())
{
String s=it.next();
System.out.println(s+s.length());
}
}
}
//泛型类(自定义)
/*什么时候定义泛型类?
当类中要操作的引用数据类型不确定的时候,早起定义Object来完成扩展
现在定义泛型来完成扩展*/
class Utils<MY>
{
private MY t;
public void setObject(MY t)
{
this.t=t;
}
public MY getObject()
{
return t;
}
}
class GenericDemo3
{
public static void main(String[] args)
{
Utils<Student> u=new Utils<Student>();
u.setObject(new Student(null, 0));//如果此处新建对象与下边调用方法的不一致编译会失败
Student s=u.getObject();//不用转型了,
}
}
import java.util.*;
class GenericDemo2
{
public static void main(String[] args)
{
TreeSet<String> ts=new TreeSet<String>(new LenComparator());
ts.add("fh");
ts.add("ergehersg");
ts.add("grehth");
ts.add("jukkiu");
ts.add("ty");
Iterator<String> it=ts.iterator();
while(it.hasNext())
{
String s=it.next();
System.out.println(s);
}
}
}
class LenComparator implements Comparator<String>
{
public int compare(String o1,String o2)
{
int num=new Integer(o2.length()).compareTo(new Integer(o1.length()));
if(num==0)
return o2.compareTo(o1);
return num;
}
}
/*
* 类上定义的泛型在整个类中有效,
* 为了让不同方法可以操作不同类型,可以将泛型定义在方法上
*
* 静态方法不可以访问定义在类上的泛型,可以将泛型定义在方法上实现访问*/
class Demo<M>//此处定义的泛型在下边没有自定义泛型的方法上有效
{
public void show(M m)
{
System.out.println(m);
}
public <M> void print(M m)
{
System.out.println(m);
}
public static<M> void method(M m)//静态方法要在方法上自定义泛型才可以访问
{
System.out.println(m);
}
}
public class GenericDemo4
{
public static void main(String[] args)
{
Demo<String> d=new Demo<String>();
d.show("haha");
//d.show(4);此处会提示编译失败
//而print方法由于在方法上自定义了泛型,可以传入非String类型的数据。
d.print(4);
d.print("show");
}
}
/*
* ?叫做通配符,也可以称为占位符。
* 泛型的限定:(用于泛型扩展用的)
* ? extends E:可以接收E类型或者E的子类型。上限
* ? super E:可以接收E类型或E的父类。下限*/