美文网首页
当泛型遇到重载

当泛型遇到重载

作者: nightkidjj | 来源:发表于2017-05-06 23:35 被阅读173次

java泛型方法在重载时有个问题:不能定义具有相同集合类型参数的重载方法,例如:

void method(List<Object> list) {
    System.out.println("List<Object>");
}

void method(List<String> list) {
    System.out.println("List<String>");
}

在同一个类里这两个方法是不能同时存在的。这是为何?按理说List<String>类型并不是List<Object>类型的子类(即使是子类,也可以定义重载方法), 也就是说它们属于不同的类型,为啥不能重载?原因在于java的泛型实际上并不是真正的泛型,它只是在编译的时候的一些限制,用于保证不会出现运行时潜在的类型转换错误,编译之后的class中并没有泛型,也就是说运行时不存在泛型一说,List<String>与List<Object>编译之后都是List类型,已经丢失了泛型信息,这称为 "类型擦除" 所以以上两个方法最后都变成了

void method(List list) {
}

这样这两个方法就没有任何区别了,因此不能重载。

相关文章

  • 当泛型遇到重载

    java泛型方法在重载时有个问题:不能定义具有相同集合类型参数的重载方法,例如: 在同一个类里这两个方法是不能同时...

  • 泛型auto

    泛型auto 重载 默认参数

  • 九、泛型

    九、泛型 尽量不要写这种有能与泛型方法重载的代码,有迷惑性 限定传入 T 的类型 泛型数组 Java 不支持泛型类...

  • [swift 进阶]读书笔记-第九章:泛型 C9P1 重载

    第九章:泛型 Generics 9.1 重载 Overloading 自由函数的重载 Overload Resol...

  • Swift进阶十一:泛型

    一:重载 重载和泛型紧密相关.拥有同样名字,但是参数或返回类型不同的多个方法互相称为重载方法,方法的重载并不意味着...

  • Swift 泛型与重载

    编译器在编译泛型函数时,会根据实参类型,以泛型函数为模板,合成对应的函数。如果泛型函数有重载版本,编译器会以最接近...

  • 《Swift进阶》ReadingNotes_7

    泛型的使用: 1:使用泛型约束进行重载 这上面的用法中,我们并不关心这个序列的元素具体是什么类型,只是要求元素可以...

  • Kotlin 结合 Lambda 表达式调用泛型方法

    使用 RxJava 时会遇到很多泛型,一不小心就进入泛型地狱,RxJava 遇到 Kotlin + Lambda ...

  • Geekband C++ 第五周

    概述 C++模板简介 函数模板 C++类模板 操作符重载 泛型编程 容器

  • 多态,泛型,继承,封装,重载

    前言: 封装可以隐藏实现细节,使得代码模块化;继承可以扩展已存在的代码块(类);泛型是为了显现算法与类型脱离;它们...

网友评论

      本文标题:当泛型遇到重载

      本文链接:https://www.haomeiwen.com/subject/ujbytxtx.html