泛型基础

来源:互联网 发布:java算法题 编辑:程序博客网 时间:2024/05/01 04:06
public class Custom {}public class CustomDAO extends DAO<Custom> {}/** * 泛型的使用 * 1. 在集合中使用泛型 * 2. 自定义泛型类、泛型接口、泛型方法 * 3. 泛型与继承的关系 * 4. 通配符 */public class Generic {    public static void main(String[] args) {        test_1();        test_2();        testCustomGeneric();        test_dao();    }    public static void test_dao() {        CustomDAO dao = new CustomDAO();        dao.add(new Custom());    }    /**     * 测试泛型类     * 1. 实例化泛型类的对象时,指明泛型的类型。     *    指明以后,对应的类中所有使用泛型的位置,都变为实例化中指定的泛型的类型。     * 2. 如果我们自定了泛型类,但是在实例化时没有使用,那么默认类型是Object类的。     */    public static void testCustomGeneric() {        GenericOrder<Integer> order = new GenericOrder<Integer>();        order.setT(89);        order.add(97);        System.out.println(order.getT());        System.out.println(order.getList().size());        int i = order.getE(45);        String value = order.getE("123");    }    /**     * 1. 在集合中没有使用泛型的情况     */    public static void test_1() {        java.util.List list = new ArrayList();        list.add(89);        list.add(86);        list.add(76);        // 1. 没有使用泛型, 任何Object及其子类的对象都可见添加进来        list.add("AA");        for(int i = 0; i < list.size(); i++) {            // 2. 强转为 int 类型时, 可能报 ClassCastExeption 异常            int score = (Integer) list.get(i);            System.out.println(score);        }    }    /**     * * 2. 在集合中使用泛型的情况     */    public static void test_2(){        List<Integer> list = new ArrayList<Integer>();        list.add(78);        list.add(89);//    list.add("AA"); // 会直接报错        for(int i = 0; i < list.size(); i++) {            int score = list.get(i);            System.out.println(score);        }        Iterator<Integer> iterator = list.iterator();        while(iterator.hasNext()) {            System.out.println(iterator.next());        }    }}
/** * 自定义泛型类 */public class GenericOrder<T> {    private String orderName;    private int orderId;    private T t;    private List<T> list = new ArrayList<T>();    /** 声明泛型方法  */    public <E> E getE(E e) {        return e;    }    public void add(T e){        list.add(e);    }    public List<T> getList() {        return list;    }    public T getT() {        return t;    }    public void setT(T t) {        this.t = t;    }    public String getOrderName() {        return orderName;    }    public void setOrderName(String orderName) {        this.orderName = orderName;    }    public int getOrderId() {        return orderId;    }    public void setOrderId(int orderId) {        this.orderId = orderId;    }}/** * 继承泛型类或者泛型接口时,可以指明泛型的类型 * */class SubOrder extends GenericOrder<Integer> {}class SubOrder2<T> extends GenericOrder<T> {}
/**
*  泛型基类
*/public class DAO<T> {    public void add(T t) {        // ...    }    public T get(int index) {        return null;    }    public List<T> getForList(int index) {        return null;    }    public void delete(int index) {    }}
public class CustomDAO extends DAO<Custom> {}
public class Custom {}
0 0