1、泛型接口:
interface Info<T>{//在接口上定义泛型
public T getVar();//定义抽象方法,抽象方法的返回值就是泛型类型
}
class InfoImpl implements Info{
public String getVar(){
return null;
}
}
以上的操作,并不是一个子类实现泛型的最好操作,最好在实现的时候也
指定其具体的泛型类型;
泛型接口实现的两种方式:
1:定义子类:在子类的定义上也声明泛型类型
interface Info<T>{//在接口上定义泛型
public T getVar();//定义抽象方法,抽象方法的返回值就是泛型类型
}
class InfoImpl<T> implements Info<T>{
private T var;
public InfoImpl(T var){
this.var=var;
}
public void setVar(T var){
this.var=var;
}
public T getVar(){
return this.var;
}
}
public class Demo{
public static void main(String args[]){
Info<String> i=null;
i=new InfoImpl<String>("lid");
System.out.print("内容:"+i.getVar());
}
}
2、如果现在实现接口的子类不想使用泛型声明,则在实现接口的时候直接指定红啊
其具体的操作类型即可;
interface Info<T>{//在接口上定义泛型
public T getVar();//定义抽象方法,抽象方法的返回值就是泛型类型
}
class InfoImpl implements Info<String>{
private String var;
public InfoImpl(String var){
this.var=var;
}
public void setVar(String var){
this.var=var;
}
public String getVar(){
return this.var;
}
}
public class Demo{
public static void main(String args[]){
Info i=null;
i=new InfoImpl("lid");
System.out.print("内容:"+i.getVar());
}
}
2、泛型方法:
泛型方法所在的类是不是泛型类是没有关系的;
泛型方法:
class Demo01{
public <T> T fun(T t){//可以接受任意数据类型
return t;
}
}
public class Demo{
public static void main(String args[]){
Demo01 d=new Demo01();//实例化一个对象
String str=d.fun("lid");//传递字符串
int i=d.fun(20);//传递整数
System.out.println(str);
System.out.println(i);
}
}
3、通过泛型方法返回泛型类的实例
因为之前的代码中可以发现,只要在方法中定义了泛型操作,则可以传递任意的数据类型;
class Info<T extends Number>{
private T var;
public T getVar(){
return this.var;
}
public void setVar(T var){
this.var=var;
}
public String toString(){
return this.var.toString();
}
}
public class Demo{
public static void main(String args[]){
Info<Integer> i=fun(30);
System.out.println(i);
}
public static <T extends Number> Info<T> fun(T param){
Info<T> temp=new Info<T>();
temp.setVar(param);
return temp;
}
}
4、使用泛型统一传入参数的类型
class Info<T>{
private T var;
public T getVar(){
return this.var;
}
public void setVar(T var){
this.var=var;
}
public String toString(){
return this.var.toString();
}
}
public class Demo{
public static void main(String args[]){
Info<String> i1=new Info<String>();
Info<String> i2=new Info<String>();
i1.setVar("Hello");
i2.setVar("girls");
add(i1,i2);
}
public static <T> void add(Info<T> i1,Info<T> i2){
System.out.println(i1.getVar()+" "+i2.getVar());
}
}
注:add(Info<T> i1,Info<T> i2)泛型必须统一;
5、泛型数组:
public class Demo{
public static void main(String args[]){
Integer i[]=fun1(1,2,3,4,5,6);
fun2(i);
}
public static <T> T[] fun1(T...arg){//接收可变参数
return arg;
}
public static <T> void fun2(T param[]){
System.out.println("接收泛型数组");
for(T t:param){
System.out.print(t+"、");
}
}
}
6、泛型的嵌套设置:
再设置一个泛型的同时指定另一个泛型;
class Info<T,V>{//接收两个泛型类型
private T var;
private V value;
public Info(T var,V value){
this.setVar(var);
this.setValue(value);
}
public void setVar(T var){
this.var=var;
}
public void setValue(V value){
this.value=value;
}
public T getVar(){
return this.var;
}
public V getValue(){
return this.value;
}
}
class Demo01<S>{
private S info;
public Demo01(S info){
this.setInfo(info);
}
public void setInfo(S info){
this.info=info;
}
public S getInfo(){
return this.info;
}
}
public class Demo{
public static void main(String args[]){
Demo01<Info<String,Integer>> d=null;
Info<String,Integer> i=null;
i=new Info<String,Integer>("lid",20);
d=new Demo01<Info<String,Integer>>(i);
System.out.println("内容一:"+d.getInfo().getVar());
System.out.println("内容二:"+d.getInfo().getValue());
}
}