Java泛型

泛型:”参数化类型“;类似于方法中的形参。

泛型类:

 1 public static void main(String[] args) {
 2         //传入泛型类型
 3         Data<String> data = new Data<String>("N","m");
 4         
 5         System.out.println(data.getBo());
 6         
 7         Data<Integer> data2 = new Data<Integer>(10,20);
 8         
 9         System.out.println(data2.getMo());
10         
11         //true;说明这两个对象终究还是同一个类型。泛型是只作用在编译期。
12         System.out.println(data2.getClass() == data.getClass()); 
13     }
14 }
15 //这里的泛型T有调用方来决定类型;
16 class Data<T>{
17     private T bo;
18     private T mo;
19     public Data(T bo,T mo) {
20         super();
21         this.bo = bo;
22         this.mo = mo;
23     }
24     public T getBo() {
25         return bo;
26     }
27     public void setBo(T bo) {
28         this.bo = bo;
29     }
30     public T getMo() {
31         return mo;
32     }
33     public void setMo(T mo) {
34         this.mo = mo;
35     }
36 }

 

泛型方法:

 1 public static void main(String[] args){
 2 
 3     //代码更灵活使用调用了;数据类型的限制被放大
 4     Pontprient("Java",100);
 5     
 6 }
 7 private static <V,K> void Pontprient(V m,K n) {
 8         
 9     V m1 = m;
10     K n1 = n;
11     System.out.println(m1+","+n1);
12     
13 }

泛型接口/类:

public class FanTypeInterfaceDemo {
    public static void main(String[] args) {
        List<bigPerson> list = new ArrayList<bigPerson>();
        list.add(new bigPerson("大爷"));
        list.add(new bigPerson("二大爷"));
        list.add(new bigPerson("三阿爷"));
        list.add(new bigPerson("四阿爷"));
        
        List<kids> listkid = new ArrayList<kids>();
        listkid.add(new kids("大宝"));
        listkid.add(new kids("小宝"));
        listkid.add(new kids("三宝"));
        
        sleepMoth(list);
        System.out.println("-------优雅的分割线-------");
        sleepMoth(listkid);
    }
    // 表示List中存储的是Persons对象或者Persons的子类对象
    // ? extends 类/接口 ---泛型的继承----表示可以使用的是这个类/子类/子接口对象
    // 确定了泛型的上限
    public static void sleepMoth(List<? extends Persons> person){
        for (Persons persons : person) {
            // 除了null以外不能存放其他的元素
            persons.sleep();
        }
    }
    // 表示可以传入String及其父类或者父接口的对象
    // ? super 类/接口 ---泛型的继承---表示可以使用这个类/父类/父接口的对象
    // 确定了泛型的下限
    public static void sleepMoth2(List<? super String> person) {
        // 可以向list中添加元素吗?---不可以---除了null以外,其余不行
    }

    
}

//定义接口和实现接口;
interface Persons{
    void sleep();
}
class bigPerson implements Persons{
    private String name;
    
    public bigPerson(String name) {
        super();
        this.name = name;
    }

    @Override
    public void sleep() {
        System.out.println(name+"睡在沙发上...");
    }
    
}
class kids implements Persons{
    private String name;
    
    public kids(String name) {
        super();
        this.name = name;
    }
    @Override
    public void sleep() {
        System.out.println(name+"睡在婴儿车上....");
    }
    
}

 

posted @ 2017-05-04 20:35  大大大圣  阅读(199)  评论(0编辑  收藏  举报