Java学习记录:泛型

泛型

基本介绍
  1. 泛型又称参数化类型,是JDK5.0出现的新特性,解决数据类型的安全性问题

  2. 在类声明或实例化时只要制定好需要的具体的类型即可

  3. Java泛型可以保证如果程序在编译时没有发出警告,运行时不会产生ClassCastException异常。同时有助于代码简洁、强壮

  4. 泛型的作用:可以在类声明时通过一个标识表示类中某一个属性的类型,或者是某个方法的返回值的类型,或者是参数类型

//在Java增加泛型类前,泛型通过继承实现
public class ArrayList{
    private Object[] elementData;
    ...
    public Object get(int i){...}
    public void add(Object o){...}
}

这会导致两个问题:

//1.取值时必须强制类型转换
ArrayList files = new ArrayList();
...
String filename = (String)files.get(0);
//2.没有错误检查。这就可以向数组列表中添加任何类的对象
files.add(new File("..."));

这样调用,编译和运行都不会出错。但在别的情况,如果把get的结果强制转换为String就可能产生错误。

定义简单泛型类
public class Pair<T,U> {
    private T first;
    private U second;

    public Pair(){
        this.first = null;
        this.second = null;
    }
    public Pair(T first, U second) {
        this.first = first;
        this.second = second;
    }

    public T getFirst() {
        return first;
    }

    public void setFirst(T first) {
        this.first = first;
    }

    public U getSecond() {
        return second;
    }

    public void setSecond(U second) {
        this.second = second;
    }
}
//类型变量放在类名后面,泛型类可以有多个类型变量, 像是<K,V>这样的结构
泛型方法
class ArrayAlg{
    public static <T> T getMiddle(T... a){
        return a[a.length / 2];
    }
}
  1. 类型变量放在修饰符的后面,返回类型的前面

  2. 泛型方法可以定义在普通类中,也可以定义在泛型类中

  3. 调用泛型方法时,在方法名前的尖括号放入具体的类型(大多数情况可以忽略类型参数,编译器会帮助我们推断类型)

类型变量的限定

通过给类型变量T设定上界,保证T所属的类都是上界类型及其子类,确保T对方法的正常调用

<T extends BoundingType>
//选择关键字extends的原因是更接近子类的概念
<T extends Comparable & Serializable>
//一个类型变量或通配符可以有多个限定
//限定类型用“&”隔开,逗号用于分隔类型变量

在java的继承中,可以根据需要拥有多个接口超类型,但限定中至多有一个类(单继承机制相关)。如果用一个类作为限定,他必须是限定列表中的第一个。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值