范型的使用示例:函数参数中范型的使用

范型的使用

阿里巴巴规范: 【强制】泛型通配符<? extends T>来接收返回的数据,此写法的泛型集合不能使用 add 方法, 而<? super
T>不能使用 get 方法,两者在接口调用赋值的场景中容易出错。 说明:扩展说一下 PECS(Producer Extends
Consumer Super)原则:第一、频繁往外读取内容的,适合用 <? extends T>。第二、经常往里插入的,适合用<?
super T>

重点:参数类型的范型形如Pair<? extends Number>支持get方法,形如Pair<? super Integer>支持set方法 符合PESC Producer Extends Super Consermer原则具体见廖大神的博客 super extends泛型的应用

package com.example.test;

public class GenericsExtendsDemo {
    public static void main(String[] args) {
        Pair<Integer> p = new Pair<>(123, 456);
        int n = add(p);
        System.out.println(n);

        Pair<Number> p1 = new Pair<>(12.3, 4.56);
        Pair<Integer> p2 = new Pair<>(123, 456);
        setSame(p1, 100);
        setSame(p2, 200);
        System.out.println(p1.getFirst() + ", " + p1.getLast());
        System.out.println(p2.getFirst() + ", " + p2.getLast());
    }

    static int add(Pair<? extends Number> p) {
        // Pair是Number的子类,但不确定p具体是什么类型,所以不能直接赋值为具体类型
        Number first = p.getFirst();
        Number last = p.getLast();
        // 报错
//        p.setFirst(new Integer(first.intValue() + 100));
//        p.setLast(new Integer(last.intValue() + 100));
        return p.getFirst().intValue() + p.getFirst().intValue();
    }

    static void setSame(Pair<? super Integer> p, Integer n) {
        // Pair子类是Integer,所以get不到其类型
        p.setFirst(n);
        p.setLast(n);
        Object t= p.getFirst();
    }

}

class Pair<T> {
    private T first;
    private T last;

    public Pair(T first, T last) {
        this.first = first;
        this.last = last;
    }

    public T getFirst() {
        return first;
    }
    public T getLast() {
        return last;
    }
    public void setFirst(T first) {
        this.first = first;
    }
    public void setLast(T last) {
        this.last = last;
    }
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值