JavaSE--重新学习_查漏补缺(10)--泛型

一、为什么有泛型

  • 泛型,JDK1.5新加入的,解决数据类型的安全性问题,其主要原理是在类声明时通过一个标识表示类中某个属性的类型或者是某个方法的返回值及参数类型。这样在类声明或实例化时只要指定好需要的具体的类型即可。
  • Java泛型可以保证如果程序在编译时没有发出警告,运行时就不会产生ClassCastException异常。同时,代码更加简洁、健壮。
  • 只有指定类型才可以添加到集合中:类型安全

二、泛型有效阶段

  • java中的泛型,只在编译阶段有效,泛型信息不会进入运行时阶段。

三、泛型的使用

  • 泛型有三种使用的地方:泛型类、泛型方法、泛型接口。
  • (1)、泛型类
    1. 对象实例化时不指定泛型,默认为:Object。
    2. 泛型不同的引用不能相互赋值。
      在这里插入图片描述
      在这里插入图片描述
  • (2)、泛型接口
    1. 未传入泛型实参时,与泛型类的定义相同,在声明类的时候,需将泛型的声明也一起加到类中
    2. 如果不声明泛型,如:class FruitGenerator implements Generator,编译器会报错:“Unknown class”
/**
 * 未传入泛型实参时,与泛型类的定义相同,在声明类的时候,需将泛型的声明也一起加到类中
 * 即:class FruitGenerator<T> implements Generator<T>{
 * 如果不声明泛型,如:class FruitGenerator implements Generator<T>,编译器会报错:"Unknown class"
 */
class FruitGenerator<T> implements Generator<T>{
    @Override
    public T next() {
        return null;
    }
}

/**
 * 传入泛型实参时:
 * 定义一个生产器实现这个接口,虽然我们只创建了一个泛型接口Generator<T>
 * 但是我们可以为T传入无数个实参,形成无数种类型的Generator接口。
 * 在实现类实现泛型接口时,如已将泛型类型传入实参类型,则所有使用泛型的地方都要替换成传入的实参类型
 * 即:Generator<T>,public T next();中的的T都要替换成传入的String类型。
 */
class FruitGenerator implements Generator<String> {
@Override
public String next() {
// TODO Auto-generated method stub
return null;
}
}
  • (3)、泛型方法
    1. 方法也可以被泛型化,不管此时定义在其中的类是不是泛型化的。在泛型方法中可以定义泛型参数,此时,参数的类型就是传入数据的类型。
    2. 泛型方法,在调用之前没有固定的数据类型在调用时,传入的参数时什么类型,就会把泛型改成什么类型,也就是说泛型方法会在调用时确定泛型具体数据类型。
    3. 非静态方法能使用类定义的方法;在静态方法中不能使用类定义的泛型
      如果想使用泛型,只能使用静态方法自己定义的泛型。
    4. 在各个方法中定义的泛型 都是独立使用的。
    5. 泛型可变参数方法示例。
/**
 * 泛型方法与可变参数
 * @param args
 */
public <T> void printMsg( T... args){
    for(T t : args){
       System.out.println("泛型测试 ,t is " + t);
    }
}

四、通配符

  • 主要使用:有限制的通配符
  1. <? extends Person> (无穷小 , Person]

只允许泛型为Person及Person子类的引用调用

  1. <? super Person > [Person , 无穷大)

只允许泛型为Person及Person父类的引用调用

  1. <? extends Comparable>

只允许泛型为实 现Comparable接口的实现类的引用调用

  • 简单示例
/**
 * 不确定集合中的元素具体的数据类型
 * 使用?表示所有类型
 * @param list
 */
public void test(List<?> list){
System.out.println(list);
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值