java(泛型)

 

1.例子

/**
 * 泛型的使用
 * 在集合中使用泛型
 * 注意点:
 * 1.泛型的类型必须是类,不能是基本数据类型,需要用到基本数据类型的位置,需要使用其包装类
 * 2.如果实例化时,没有指明泛型的类型,默认类型为java.lang.Object类型
 */
public class GenericTest {

    @Test
    public void test1() {
        List<Integer> list = new ArrayList<Integer>();
        list.add(11);
        list.add(22);
        list.add(33);
        for(Integer s : list) {
            int scope = s;
            System.out.println(scope);
        }
    }

    @Test
    public void test2() {
        List<Integer> list = new ArrayList<Integer>();
        list.add(11);
        list.add(22);
        list.add(33);
        Iterator<Integer> iterator = list.iterator();
        while (iterator.hasNext()) {
            int scope = iterator.next();
            System.out.println(scope);
        }
    }

    @Test
    public void test3() {
        Map<String,Integer> map = new HashMap<String, Integer>();
        map.put("jack",22);
        map.put("lilei",33);
        map.put("zhangsan",44);
        //泛型的嵌套
        Set<Map.Entry<String, Integer>> entry = map.entrySet();
        Iterator<Map.Entry<String, Integer>> iterator = entry.iterator();
        while (iterator.hasNext()) {
            Map.Entry<String, Integer> e = iterator.next();
            String key = e.getKey();
            int value = e.getValue();
            System.out.println(key+" ---- " +value);
        }
    }
}

 

2. Order例子

public class Order<T> {
String orderName;
int orderId;
T orderT;

public Order() {
// T[] t = new T[10]; 编译不通过
// T[] t = (T[])new Object[10]; 编译通过

}

public Order(String orderName, int orderId, T orderT) {
this.orderName = orderName;
this.orderId = orderId;
this.orderT = orderT;
}

/**
* 泛型方法: 在方法中出现了泛型的结构,泛型参数与类的泛型参数没有任何关系,
* 换句话说,泛型方法所属的类是不是泛型类都没有关系
* 泛型方法,也可以声明为静态的,原因:泛型参数是在调用方法时确定的,并非在实例化类时确定
* @param arrays
* @param <E>
* @return
*/
public <E> List<E> getList(E[] arrays) {
List<E> list = new ArrayList<E>();
for(E e : arrays) {
list.add(e);
}
return list;
}

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;
}

public T getOrderT() {
return orderT;
}

public void setOrderT(T orderT) {
this.orderT = orderT;
}
}


public class SubOrder extends Order<Integer>{ } public class SubOrder1<T> extends Order<T> { }
public class GenericTest1 {

@Test
public void test1() {
//如果定义了泛型类,实例化没有指明类的泛型,则认为此泛型类型为Object类型
//如果定义了类是带泛型的,建议在实例化时要指明类的泛型
Order order = new Order();
order.setOrderT("ss");
order.setOrderT(11);
}

@Test
public void test2() {
Order<String> order = new Order<String>();
order.setOrderT("11");
//order.setOrderT(2); 编译不通过,报错
}

@Test
public void test3() {
//SubOrder是个普通类,由于子类在继承带泛型的父类时,指明了泛型类型,则实例化子类对象时,不再需要指明泛型
SubOrder subOrder = new SubOrder();
subOrder.setOrderT(11);

SubOrder1<String> subOrder1 = new SubOrder1<String>();
subOrder1.setOrderT("ss");
}

@Test
public void test4() {
Order<String> order = new Order<String>();
Integer[] integers = new Integer[]{1,2,3,4};
String[] strings = new String[]{"zhangsan","lisi","wangwu"};
List<Integer> list = order.getList(integers);
List<String> list1 = order.getList(strings);
System.out.println(list);
System.out.println(list1);

}

}

 

3.

 

 

 

 

 

 

 

 

 

 

 

 4.通配符的使用

public class GenericTest2 {

    @Test
    public void test1() {

        List<String> list1 = new ArrayList<String>();
        list1.add("st");
        list1.add("tt");
        List<Integer> list2 = new ArrayList<Integer>();
        list2.add(11);
        list2.add(22);
        List<?> list = null;
        list = list1;
        list = list2;
        print(list1);
        print(list2);

    }

    public void print(List<?> list) {

        Iterator<?> iterator = list.iterator();
        while (iterator.hasNext()) {
            Object o = iterator.next();
            System.out.println(o);

        }

    }
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章