1.1 定义泛型接口
不仅可以声明泛型类,也可以声明泛型接口,声明泛型类和声明泛型接口语法类似,是在接口名称后边加上
格式:
interface 接口名称<泛型标识>{}
interface Info<T> //在接口上定义泛型
{
public T getVar() ;//定义抽象方法,抽象方法返回值是泛型类型
}
1.2 泛型接口实现的两种方式
定义子类,在子类上也声明泛型类型。
interface Info<T> //在接口上定义泛型
{
public T getVar() ; //接口下定义抽象方法,抽象方法返回值是泛型类型
}
class Info1<T> implements Info<T> //定义泛型接口的子类
{
private T var ; //声明属性
public Info1(T var) //构造方法 设置属性内容
{
this.setVar(var) ;
}
public void setVar(T var)
{
this.var = var ;
}
public T getVar()
{
return this.var ;
}
}
public class GenericsDemo06
{
public static void main(String[] args)
{
Info<String> i = null ; //声明接口对象
i = new Info1<String>("IronMan") ;//通过子类 实例化对象
System.out.println("内容: "+i.getVar()) ;
}
}
1.3 泛型方法
定义泛型方法
泛型方法中可以定义泛型参数,此时,参数的类型,就是传入数据的类型
[访问权限]<泛型标识>泛型标识 方法名称([泛型标识 参数名称])
class Demo
{
public<T>T run(T t) //可以接收任意类型的数据
{
return t ; //直接把参数返回
}
}
public class GenericsDemo07
{
public static void main(String[] args)
{
Demo d = new Demo() ; //实例化对象
String str = d.run("IronMan") ; //传递字符串
int i = d.run(20) ; //传递整数 自动装箱
System.out.println(str) ; //输出内容
System.out.println(i) ; //输出内容
}
}
1.4 通过泛型方法返回泛型类的实例
只要在方法中定义了泛型操作,则可以传递任意的数据类型。
class Info<T extends Number> //extends Num指定上限,只能是数字类型
{
private T var ; //定义属性,var由外部决定
public void setVar(T var)
{
this.var = var ;
}
public T getVar()
{
return this.var ;
}
public String toString() //覆写Object类中的toString()方法
{
return this.var.toString() ;//直接打印信息
}
}
public class GenericsDemo08
{
public static void main(String[] args)
{
Info<Integer> i = run(20) ; //引用传递
System.out.println(i) ;
}
public static <T extends Number> Info<T> run(T param)
{
Info<T> temp = new Info<T>() ; //根据传入的类型实例化对象
temp.setVar(param) ; //将传入的内容设置到Info对象的var属性中
return temp ; //返回实例化对象
}
}
1.5 泛型数组
使用泛型方法的时候,可以传递或返回一个泛型数组
public class GenericsDemo09
{
public static void main(String[] args)
{
Integer i[] = {1,2,3,4,5} ; //返回泛型数组
run2(i) ;
}
public static<T> T[] run1(T...arg) //接收可变参数
{
return arg ; //返回泛型数组
}
public static <T> void run2(T param[])//输出
{
System.out.print("接收泛型数组:") ;
for(T t:param)
{
System.out.print(t+",") ;
}
}
}