.java基础-java泛型

记录一下一些知识概念,用于自己遗忘时候的查缺补漏)

1.泛型概念

泛型的出现是为了使用在集合类里面,能够针对不同的数据类型,执行相同的代码。并且在编译期间就知道数据类型,便于编译器更好的提供帮助。同时为了兼容以前的版本,泛型有类型擦除的问题。

2. 泛型的分类

一般常用的泛型有泛型类,泛型接口,泛型方法。

2.1 泛型类

在一个类声明时候,就申明泛型类型。

public class Test1<T> {
    private T t;

    public T getT() {
        return t;
    }

    public void setT(T t) {
        this.t = t;
    }
}

复制代码

2.2 泛型接口

在一个接口声明时候,就申明泛型类型。

public interface Test2<T> {
    T getData(T t);
}

复制代码

2.3 泛型方法

方法申明时候,就声明泛型,并且在方法体中使用的方法,泛型方法,与是不是在泛型类中毫无关系。

public class Test3 {
    public <T> T getData(T t) {
        return t;
    }
}

复制代码

3.通配符?和变换

通配符一般有三种,无界通配符,上界通配符和下界通配符。

3.1 无界通配符

采用 的形式,比如 List,无边界的通配符的主要作用就是让泛型能够接受未知类型的数据。 与T使用不同的是,T 是表示一个 确定的 类型,通常用于泛型类和泛型方法的定义, T 可以进行多重限定。使用& 符号设定多重边界。 ?是一个 不确定 的类型,通常用于泛型方法的调用代码和形参,不能用于定义类和泛型方法,使用有边界限定符可以定义泛型方法。 但是在下面这种情况下使用情况是一样的:

    // 使用T,U两种的类型
    public <T,U> void test1(List<T> dest, List<U> src){
    }
    // 通过? 来 表示两种不相关的数据类型
    public void test2(List<?> dest, List<?> src){
    }
    //通配符是 不确定的,所以这个方法不能保证两个 List 具有相同的元素类型
    public void  test3(List<? extends Number> dest, List<? extends Number> src){
    }
    // 通过 T 来 确保 泛型参数的一致性
    public <T extends Number> void test4(List<T> dest, List<T> src){
        }
复制代码

3.2 上下界限的通配符

例如,表示上限<? extends Number>,接受Number的本身和子类,<? super Int>表示下界,接受Int 的本身和上层所有父类。

         List<? extends  Number> numbers = new ArrayList<Integer>();//协变
        List<? super Integer> numbers2 = new ArrayList<Number>();//逆变

        numbers.add(Integer.valueOf("5"));//error
        Object o = numbers2.get(3);//取数据时候只能取出Object 顶层父类的数据,因为不确定此时的数据是哪个层级的父类。
复制代码

逆变和协变描述了具有继承关系的类型,通过类型构造器映射到另一范畴时所具有的继承关系。

保持原继承关系的为协变,继承关系反转的为逆变。

应该怎么理解编程语言中的协变逆变?


 

全部评论

相关推荐

07-21 18:43
门头沟学院 Java
是暑期都招满了吗
ANEOY:今年感觉真是后端地狱级难度了,从暑期就是这样,前端需求非常大
点赞 评论 收藏
分享
昨天 11:26
清华大学 Java
打开电脑,思绪又回到了7月份刚开始的时候,感觉这个月过的如梦如幻,发生了太多事,也算是丰富了我本就是平淡的人生吧太早独立的我习惯了一切都是自己做决定,拥有绝对的决定权,而且永远不会听取别人的建议。我就是那个恋爱四年出轨的男主啦,感觉既然在牛客开了这个头,那我就要做个有始有终的人。从我出轨到结束再到和女朋友和好如初真的太像一场梦了,短短的一个月我经历了太多,也成长了很多,放下了那些本就不属于我的,找回了那些我不该放弃的。我的人生丰富且多彩,但人不能一直顺,上天总会让你的生活中出点乱子,有好有坏,让你学会一些东西,让你有成长。我和女朋友的恋爱四年太过于平淡,日常除了会制造一些小浪漫之外,我们的生活...
段哥亡命职场:不得不说,我是理解你的,你能发出来足见你是个坦诚的人,至少敢于直面自己的内心和过往的过错。 这个世界没有想象中那样非黑即白,无论是农村还是城市,在看不见的阴影里,多的是这样的事。 更多的人选择站在制高点去谩骂,一方面是社会的道德是需要制高点的,另一方面,很多人不经他人苦,却劝他人善。 大部分的我们,连自己生命的意义尚且不能明晰,道德、法律、困境,众多因果交织,人会迷失在其中,只有真的走出来之后才能看明白,可是没走出来的时候呢?谁又能保证自己能走的好,走的对呢? 可是这种问题有些人是遇不到的,不去追寻,不去探寻,也就没了这些烦恼,我总说人生的意义在过程里,没了目标也就没了过程。 限于篇幅,没法完全言明,总之,这世界是个巨大的草台班子,没什么过不去了,勇敢面对,革故鼎新才是正确,祝你早日走出来。查看图片
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务