Java篇(六)

目录

1.场景

2.创建

泛型类

泛型方法

3.类型限定

4.局限性

5.泛型类的继承问题与通配符

超类型限定


1.场景

代码中存在大量的通用型强制类型转换时,如Object,可用泛型代替。用于结构与方法相同但类型不同的类,避免冗余方法的产生。

2.创建

使用大写字母,常用E表示集合,K、V表示键和值,T、U、S表示任意类型。有多个类型时,用逗号隔开。

泛型类

调用时同样尖括号在类名后

@Data
@AllArgsConstructor
public class Pair<T,U> {
    private T first;
    private U second;
}

泛型方法

泛型方法即可以在泛型类中创建,也可在普通类中创建。对于后者,要在返回值前放尖括号,调用时放方法名前,通常可根据赋值判断而省略。

    public static <S> S getMid(S[] arr){
        return arr[arr.length/2];
//        System.out.println(Arrays.toString(arr));
    }

3.类型限定

规定使用的类型必须使用某个接口,如果有多个接口需要继承,用 & 隔开,如果有标签接口,即没有方法的接口,如Serializable,需放在末尾。

    public static <S extends Comparable<S> int minus(S a, S b){
        return a.compareTo(b);
    }

4.局限性

1.T不能用基本类型,如int,用封装类型代替,如Integer

2.无法用instanceof查询泛型类

3.不能创建泛型类的数组,不过可用ArrayList代替

4.使用T...obj 代替T[] 会得到警告但可以运行,但没必要

5.不能使用new T(),一定要用就提供构造器表达式Supplier

6.不能声明private static T 变量

7.不能抛出或捕获异常,如extends exception 或者catch(T e)

5.泛型类的继承问题与通配符

当Manager是Employee的子类,Pair<Manager>与Pair<Employee>没有任何关系。

也就是说,Pair<Manager>的对象不能赋给Pair<Employee>,但可以用通配符解决问题。

用“? extends ”来表示一个更大的集合。可以有get方法,但set不行。

Pair<? extends Employee> employee=new Pair<Manager>(obj1,obj2);

超类型限定

用" ? super Manager " 表示,与extends相反,可以有set方法,但不能get

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值