先了解什么是泛型,你就懂了!!!!!!!!!!!!!
泛型:JDK1.5以后出现的新特性,用于解决安全问题,是一个类型安全机制。
int[] arr = new int[3];
arr[0] = 1;
//arr[1] = 3.5;//编译失败,因为数组在创建时就已经明确了类型。
而容器在创建时没有明确类型,容易有安全隐患。这时可以使用泛型来明确容器的类型。
好处:
1.将运行时期出现问题ClassCastException,转移到了编译时期。
方便于程序猿解决问题,让运行时期问题减少,安全。
2.避免了强制转换的麻烦。
泛型格式:通过<>定义要操作的引用数据类型。
在使用java提供的对象时,什么时候使用泛型呢?
通常在集合框架中很常见,只要见到<>就要定义泛型。
其实<>就是用来接收类型的。
当使用集合时,将集合中要存储的数据类型作为参数传递到<>中即可。
泛型定义在类上:
什么时候定义泛型类?
当类中要操作的引用数据类型不确定的时候,早期定义Object来完成扩展。
现在定义泛型来完成扩展。
泛型定义在方法上:
泛型类定义的泛型,在整个类中有效,如果被方法使用,那么泛型类的对象明确要操作的具体类型后,所以要操作的类型就已经固定了。
class Demo<T>
{
public void show(T t)
{
System.out.println("show "+t);
}
public void print(T t)
{
System.out.println("print "+t);
}
}
为了不让不同方法可以操作不同类型,而且类型还不确定。那么可以将泛型定义在方法上。
特殊之处:
静态方法不可以访问类上定义的泛型。
如果静态方法操作的应用数据类型不确定,可以将泛型定义在方法上。
class Demo <Q>
{
public <T> void show(T t)//泛型定义在方法上,可以操作不同类型
{
System.out.println("show "+t);
}
public void print(Q t)//泛型类定义的泛型在整个类中有效
{
System.out.println("print "+t);
}
public static <W> void method(W t)
{
System.out.println("method "+t);
}
}
泛型定义在接口上。
通配符 ? 也可以理解为占位符。
泛型限定:
<? extends E>:可以接收E类型和E的子类型。上限。
<? super E>:可以接收E类型或者E的父类型。下限。
只打印Person和Person的子类 用 <? extends Person>
|