泛型

package com.xiaofan.test;

import java.util.ArrayList;
import java.util.List;

import org.junit.Test;

public class GenericTest {
    
    /**
     * 方法上声明泛型
     */
    public <T> List<T> p(T t) {
        System.out.println(t);
        List<T> list = new ArrayList<T>();
        return list;
    }
    /**
     * 方法上声明泛型,测试
     */
    @Test
    public void demo2() {
        List<String> list1 = p("abc");
        List<Integer> list2 = p(100);
        List<ArrayList> list3 = p(new ArrayList());
    }
    /**
     * 测试类上面声明泛型
     */
    @Test
    public void demo3(){
        GenericDao<String> genericDao = new GenericDao<String>();
        genericDao.save("aaa");
        String id = genericDao.getId(0);

        GenericDao<Integer> genericDao2 = new GenericDao<Integer>();
        genericDao2.save(100);
        int id2 = genericDao2.getId(0);
        // 阅读ArrayList 和 HashMap 源码 ctrl+ shift+T
    }
}
/**
 * 类上面声明泛型
 */
class GenericDao<T> {
    private T field1;

    public void save(T obj) {
    }

    public T getId(int id) {
        return field1;
    }
}

泛型的上限,下限,通配符

package com.xiaofan.test;

import java.util.ArrayList;
import java.util.List;

import org.junit.Test;

public class GenericTest3 {

    public void print(List<?> list) {
        for (int i = 0; i < list.size(); i++) {
            Object value = list.get(i);
            System.out.println(list.get(i));
        }
    }

    @Test
    public void demo1() {
        List<String> list1 = null;
        List<Integer> list2 = null;
        print(list1);
        print(list2);

        List<Number> list3 = new ArrayList<Number>();
        add(list3);

        List<Byte> list4 = new ArrayList<Byte>();
        add(list4);
    }

    public void add(List<? extends Number> list) {
        // list.add(100);
        Number a = list.get(0);
    }

    public void add2(List<? super Integer> list) {
        list.add(100);
    }
}

 

posted @ 2015-03-16 20:00  vaer  阅读(171)  评论(0编辑  收藏  举报