泛型
泛型类型 class Person<T,V>
泛型的安全警告
在申明时指定泛型的类型,如果没指定就会在编译时出现警告,但仍然可以执行,因为没指定类型就都是Object类型
Person<String,Integer>p =new Person<String,Integer>();
Person p =new Person();
泛型与子类继承的限制(在泛型中不能用父类来接受子类)
泛型通配符(一般用在参数传递时)
public void fun(Person<?,?> p){//?为通配符
受限泛型
public void fun(Person<? extends Number> p)
?就只能是Number的子类或Number
public void fun(Person<? super String> p)
?就只能是String的父类或自己
泛型接口定义;
interface Info<T>{
public T getVar();
}
泛型接口实现的两种方式
在子类实例化时指定类型
class InfoImpl<T> implements Info<T>{}
在接口被继承时,直接指明类型
class InfoImpl impements Info<String>
泛型方法
定义泛型方法
静态方法不能访问类上定义的泛型
package cn.java.generics;
public class GenericsDemo3 {
public static void main(String[] args) {
GenericsFun gf = new GenericsFun();
System.out.print(gf.test("haoren"));
System.out.print(gf.test(12));
}
}
class GenericsFun{
public <T> T test(T t){
return t;
}
}
泛型数组
//作为参数传递
public <T> void test(T a[]){
for(int i=0;i<a.length;i++){
System.out.println(a[i]);
}
}
//返回值为数组
public<T> T[] testReturn(T a[]){
return a;
}
泛型的嵌套
class PersonDemo<T,V>
class Theach<P>
Theach<PersonDemo> th = new Theach<PersonDemo>(new PersonDemo<String,Integer>("haorne",2));