泛型数组+泛型嵌套+泛型应用实例

来源:互联网 发布:中国造不出圆珠笔知乎 编辑:程序博客网 时间:2024/04/30 00:31

泛型数组

关于泛型方法-泛型接口和方法

使用泛型方法时,也可以传递和返回一个泛型数组。
【接收和返回泛型数组】

@SuppressWarnings("unchecked")public class GeneriseDemo30{    public static void main(String args[]){        //返回泛型数组        Integer i[]=fun(1,2,3,4,5,6);        //输出数组内容        fun2(i);    }    //接收可变参数,返回泛型数组    public static <T> T[] fun(T...arg){        return arg;    }    public static <T> void fun2(T param[]){        System.out.println("接收泛型数组:");        for (T t : param )        {            System.out.print(t+"、");        }    }}

结果:
这里写图片描述

以上程序从fun()方法中返回一个泛型数组,在fun()方法接收参数是使用了可变参数传递方式,然后将fun()返回的泛型数组给fun2()进行输出

泛型嵌套

也可以在一个类的泛型中指定另外一个类的泛型。
【定义两个泛型】

class Info<T,V>{    private T var;    private V value;    public Info(T var,V value){        this.setVar(var);        this.setValue(value);    }     public T getVar(){        return var;     }     public void setVar(T var){        this.var=var;     }     public V getValue(){        return value;     }     public void setValue(V value){        this.value=value;     }}class Demo<S>{    private S info;    public Demo(S info){        this.setInfo(info);    }    public S getInfo(){        return info;    }    public void setInfo(S info){        this.info=info;    }}public class  GeneriseDemo31{    public static void main(String args[]){        Demo<Info<String,Integer>> d=null;        Info<String,Integer> i=null;        i=new Info<String,Integer>("凹凸",22);        d=new Demo<Info<String,Integer>>(i);        System.out.println("1."+d.getInfo().getVar());        System.out.println("2."+d.getInfo().getValue());    }}

运行结果:
这里写图片描述

实例——泛型应用

用户在设计类的时候往往会关联,例如,一个人中可以定义一个信息的属性,但是一个人可能有各种各样的信息(如联系方式、基本信息)等,所以此信息属性的类型就可以通过泛型进行声明,然后只要设计相应的信息类即可。
【定义标识接口–信息】

interface Info{    //定义一个标识接口,此接口没有定义任何方法}

【定义第一个类–联系方式】

class Contact implements Info{    private String address;    private String telphone;    public Contact(String address,String telphone){        this.setAddress(address);        this.setTelphone(telphone);    }    public String getAddress(){        return this.address;    }    public void setAddress(String address){        this.address=address;    }    public String getTelphone(){        return this.telphone;    }    public void setTelphone(String telphone){        this.telphone=telphone;    }    public String toString(){        return "联系方式:"+"\n"+            "\t|--联系地址:"+this.address+            "\t|--联系电话:"+this.telphone;    }}

【定义第二个类–个人信息】

class Introduce implements Info{    private String name;    private int age;    public Introduce(String name,int age){        this.setName(name);        this.setAge(age);    }    public String getName(){        return name;    }    public void setName(String name){        this.name=name;    }    public int getAge(){        return age;    }    public void setAge(int age){        this.age=age;    }    public String toString(){        return "个人信息:"+"\n"+            "\t|--姓名:"+this.name+            "\t|--年龄:"+this.age;    }}

【定义Person类,使用泛型】

class Person<T extends Info>{    private T info;    public Person(T info){        this.setInfo(info);    }    public T getInfo(){        return this.info;    }    public void setInfo(T info){        this.info=info;    }    public String toString(){        return this.info.toString();    }}

测试:

public class GeneriseDemo32{    public static void main(String args[]){        //声明Person对象,同时指定Contact类型        Person<Contact> per=null;        per=new Person<Contact>(new Contact("中国","111111"));        System.out.println(per);        //声明Person对象,同时指定Introduce类型        Person<Introduce> per2=null;        per2=new Person<Introduce>(new Introduce("凹凸",20));        System.out.println(per2);    }}

运行结果:
这里写图片描述

0 0
原创粉丝点击