菜单 学习猿地 - LMONKEY

VIP

开通学习猿地VIP

尊享10项VIP特权 持续新增

知识通关挑战

打卡带练!告别无效练习

接私单赚外块

VIP优先接,累计金额超百万

学习猿地私房课免费学

大厂实战课仅对VIP开放

你的一对一导师

每月可免费咨询大牛30次

领取更多软件工程师实用特权

入驻
85
0

Java泛型

原创
05/13 14:22
阅读数 93075

Java泛型

在JDK1.5之前只能把元素类型设计为Object,JDK1.5后使用泛型,指定泛型参数的模型。

1.泛型在集合中的使用

如果在List不使用泛型,在List添加多种类型,使用Object对象进行读取,如果进行强转会出现错误。

@Test
    public void GenericListTest()
    {
        List list = new ArrayList();
        list.add("123");
        list.add(123);
        Iterator iterator = list.iterator();
        while(iterator.hasNext())
        {
            String next = (String) iterator.next();//因为list有Integer类型,强转会报错
            System.out.println(next);
        }
    }

所以在Java5.0中新增泛型,可以在创建集合时指定相应的泛型,在使用集合相关方法时候,必须使用指定类型.

ArrayList<String> list1 = new ArrayList<>();//后面<>里面的类型可以省略
        list1.add("123");
        Iterator<String> iterator1 = list1.iterator();
        while(iterator1.hasNext())
        {
            System.out.println(iterator1.next());
        }

2.泛型类、泛型接口、泛型方法

2.1泛型类、泛型接口

创建一个泛型类Person

package com.cwstd.generic;

public class PersonGeneric<T> {

    private String name;
    private T type;
    public PersonGeneric(String name,T type)
    {
        this.name=name;
        this.type=type;

    }
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public T getType() {
        return type;
    }

    public void setType(T type) {
        this.type = type;
    }

}

在创建一个Student类继承Person类
注意:继承的时候可以指明泛型的类型,也可以延续父类的泛型

public class Student extends PersonGeneric<String>{//继承时候指定泛型的类型

    public Student(String name, String type) {
            super(name, type);
    }
}

泛型接口与泛型类的使用方法相同,区别就是一个是接口,一个是类。声明的泛型T,可以在定义泛型接口中使用。

2.2泛型方法

创建一格泛型方法,将泛型数组array1复制泛型数组array上

public <E> E [] copy(E [] array,E [] array1)
    {
        array=array1;
        return array;
    }

注意:

  • 不是引用了泛型类的泛型参数就是泛型方法,需要在方法上定义了自己的泛型变量,而且需要在方法前加上<泛型>。
  • 使用类的泛型的方法,前面不能加上static,成为静态方法。(调用方法前,需要指明类的泛型变量,而静态方法可以直接调用)

3.泛型在继承上的体现

如果有两个类A(父类)B(子类):
对象G < A > 与 G < B >不能互相赋值,但是对象A < G > 与 B < G > 则可以互相赋值。

List<Object> objects = new ArrayList<Object>();
        List<String> strings = new ArrayList<>();
        objects=strings;//错误

发表评论

0/200
85 点赞
0 评论
收藏
为你推荐 换一批