Java--泛型

1.泛型的概述

集合<引用数据类型>,限定集合中可以存放的数据类型,该集合只能存放该类对象或者该对象的子类,大大增强了安全性,一般使用一个大写字母表示,如<E>,<Q>

2.泛型的好处
  • 泛型使用的初衷:避免由Object向下转型时,转换的类型是无效的,比如储存时我们向集合中储存的是Student类,在存储时自动提升为Object类,但是我们向下转型时可能用Teacher类去接收,这时候就会出现错误。。
    提高了安全性(将运行时错误转化为了编译时错误)
    省去了强转的麻烦
  • 注意事项:前后泛型必须一致,后面的泛型可以省略不写(1.7版本新特性)
  • 泛型一般不定义为Object类
    例:用泛型进行遍历
ArrayList<Student> arrayList = new ArrayList<>();
arrayList.add(new Student("张三",23));
arrayList.add(new Student("李四",24));
Iterator<Student> iterator = arrayList.iterator();
while (iterator.hasNext()) {
    Student student = iterator.next();
    System.out.println(student.getName() + " " + student.getAge());
}
3.泛型的应用
  • 泛型类,可以用于自定义类
  • 泛型方法:(非静态方法)尽可能与类的泛型一致,如果不一致在方法声明上加泛型【格式为:public <引用数据类型> void
    (静态方法)必须 有自己的泛型【格式:public static <> void】
class Per<Q> {
    private Q q;

    public Q getQ() {
        return q;
    }
    //泛型与类一致
    public void setQ(Q q) {
        this.q = q;
    }
    //泛型与类不一致
    public<W> void mood(W w) {
        System.out.println(w);
    }
    //静态方法必须写泛型
    public static<E> void mu(E e) {
        System.out.println(e);
    }
}
  • 泛型接口
interface Inter<E> {
    public void run(E e);
}
class Ter implements Inter<String> {    //使用这种更好

    @Override
    public void run(String s) {
        System.out.println(s);
    }
}
class Tee<Q> implements Inter<Q>{//对实现接口的扩展功能不太好,没有达到扩展的目的

    @Override
    public void run(Q q) {
        System.out.println(q);
    }
}
4.泛型通配符

当接收的引用数据(右边的)类型不确定时,(在左边)可以使用通配符<?>,代表任意类型

  • ?extends E :向下限定,代表E及其子类
  • ? super E:向上限定,代表E及其父类
    例:在这里插入图片描述
ArrayList<Person> arrayList = new ArrayList<>();
        arrayList.add(new Person("张三",23));
        arrayList.add(new Person("李四",24));
        ArrayList<Student> arrayList1 = new ArrayList<>();
        arrayList1.add(new Student("王五",23));
        arrayList.addAll(arrayList1);
        System.out.println(arrayList);
    }
}
class Person {
    private String name;
    private int age;
    public Person() {}

    public Person(String name,int age) {
        this.age = age;
        this.name = name;
    }

    public String getName() {
        return name;
    }

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

    public void setAge(int age) {
        this.age = age;
    }

    public int getAge() {
        return age;
    }

    @Override
    public String toString() {
        return ("(" + name + " " + age + ")");
    }
}
class Student extends Person{
    public Student() {}
    public Student(String name,int age) {
        super(name, age);
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值