泛型

 在集合中使用泛型:

1.集合接口或集合类在jsdk5.0时都修改为带泛型的结构。

2.在实例化集合类时,可以指明具体的泛型类型。

3.指明完以后,在集合类或接口中凡是定义类或接口时,内部结构(方法,构造器,属性等)使用到类的泛型的位置,都指定为实例化的泛型类型,

比如:add(E e),实例化以后,add(Integer e)。

4.泛型的类型必须是类,不能是基本数据类型,需要用到基本数据类型时,使用包装类。

5.如果实例化时没有指明泛型的类型,默认类型为Object类型

 

自定义泛型结构

一、泛型类,泛型接口:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
public class Order<T> {
    String name;
    int id;
 
    //类的内部结构可以使用类的泛型
    T orderT;
 
    public Order() {
    }
    public Order(String name, int id, T orderT) {
        this.name = name;
        this.id = id;
        this.orderT = orderT;
    }
 
    public T getOrderT() {
        return orderT;
    }
    public void setOrderT(T orderT) {
        this.orderT = orderT;
    }
}

  

 

没有使用泛型

1
2
3
4
5
6
7
8
9
10
public class GenericTest {
 
    @Test
    public void test(){
        //如果定义了泛型类,实例化没有指明类的泛型,则认为此泛型类型为Object类型
        Order order = new Order();
        order.setOrderT(213);
        order.setOrderT("abc");
    }
}

使用泛型

1
2
3
4
5
6
@Test
   public void test(){
       Order<String> order = new Order<>("a",123,"bbb");
       order.setOrderT("111");
       order.setOrderT("abc");
   }

 

1
2
3
4
5
6
7
8
9
public class SubOrder extends Order<Integer> {//不是泛型类
}
 
 @Test
    public void test1(){
        //由于子类在继承带泛型的父类时,指明了泛型的类型,则实例化子类对象时,不再需要指明泛型
       SubOrder subOrder = new SubOrder();
       subOrder.setOrderT(1);
    }

 

注意:

1.类中的静态方法中,不能使用类的泛型  

2.异常类不能声明为泛型类

3.不能声明:T[] arr = new T[10]; 可以这样声明:T[] arr = (T[]) new T[10];

 

二、泛型方法:

1
2
3
4
5
6
7
8
9
10
11
public class SubOrder<Integer> extends Order<Integer> {
 
    //泛型方法
    public <E>List<E> copyFromArrayToList(E[] arr){
        List<E> list = new ArrayList<>();
        for(E e : arr){
            list.add(e);
        }
        return list;
    }
}

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
public class SubOrder<T> extends Order<Integer> {
 
    //泛型方法
    //可以声明为静态的,泛型参数是在调用方法时确定的,并非在实例化时确定的
    public <E>List<E> copyFromArrayToList(E[] arr){
        List<E> list = new ArrayList<>();
        for(E e : arr){
            list.add(e);
        }
        return list;
    }
}
 
 
 @Test
    public void test2(){
        SubOrder<String> subOrder = new SubOrder<>();
        Integer[] nums = new Integer[]{1,2,3,4,5};
        //泛型方法在调用时,指明泛型参数的类型
        List<Integer> list = subOrder.copyFromArrayToList(nums);
    }

  

通配符:?

类A是B的父类,G<A>和G<B>是没有关系的,二者共同的父类是G<?>

 

 

 

posted @   iTao0128  阅读(3)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示