首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

在Java中为什么不同的返回类型不算方法重载?

doSomething } public void method(Integer id, String name) { // doSomething } } 为什么不同返回类型不算方法重载...方法签名是由:方法名称 + 参数类型 + 参数个数组成的一个唯一值,这个唯一值就是方法签名,而 JVM(Java 虚拟机)就是通过这个方法签名来决定调用哪个方法的。...从方法签名的组成规则我们可以看出,方法的返回类型不是方法签名的组成部分,所以当同一个类中出现了多个方法名和参数相同,但返回值类型不同的方法时,JVM 就没办法通过方法签名来判断到底要调用哪个方法了,如下图所示...: 那为什么返回类型不能做为方法签名的一部分呢?...总结 在同一个类中定义了多个同名方法,但每个方法的参数类型或者是参数个数不同就是方法重载。方法重载的典型使用场景是 String 中的 valueOf 方法,它有 9 种实现。

3.4K10

(37) 泛型 (下) - 细节和局限性 计算机程序的思维逻辑

这些局限性主要与Java的实现机制有关,Java中,泛型是通过类型擦除来实现的,类型参数在编译时会被替换为Object,运行时Java虚拟机不知道泛型这回事,这带来了很多局限性,其中有的部分是比较容易理解的...下面,我们将从以下几个方面来介绍这些细节和局限性: 使用泛型类、方法和接口 定义泛型类、方法和接口 泛型与数组 使用泛型类、方法和接口 在使用泛型类、方法和接口时,有一些值得注意的地方,比如: 基本类型不能用于实例化类型参数...定义泛型类、方法和接口 在定义泛型类、方法和接口时,也有一些需要注意的地方,比如: 不能通过类型参数创建对象 泛型类类型参数不能用于静态变量和方法 了解多个类型限定的语法 我们逐个来看下。...对于泛型类声明的类型参数,可以在实例变量和方法中使用,但在静态变量和静态方法中是不能使用的。...不过,对于静态方法,它可以是泛型方法,可以声明自己的类型参数,这个参数与泛型类的类型参数是没有关系的。

92760
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    十问泛型,你能扛住吗?

    问题一:为什么需要泛型?...答: 使用泛型机制编写的代码要比那些杂乱的使用Object变量,然后再进行强制类型转换的代码具有更好的安全性和可读性,也就是说使用泛型机制编写的代码可以被很多不同类型的对象所重用。...问题二:从ArrayList的角度说一下为什么要用泛型? 答: 在Java增加泛型机制之前就已经有一个ArrayList类,这个ArrayList类的泛型概念是使用继承来实现的。...问题三:说说泛型类吧 一个泛型类就是具有一个或多个类型变量的类,对于这个类来说,我们只关注泛型,而不会为数据存储的细节烦恼。...问题四:说说泛型方法的定义和使用 答: 泛型方法可以定义在普通类中,也可以定义在泛型类中,类型变量是放在修饰符的后面,返回类型的前面。

    1.1K10

    Java基础系列(三十四):泛型入门

    为什么需要泛型 使用泛型机制编写的代码要比那些杂乱的使用Object变量,然后再进行强制类型转换的代码具有更好的安全性和可读性,也就是说使用泛型机制编写的代码可以被很多不同类型的对象所重用。...泛型的演变 实际上在Java增加泛型机制之前就已经有一个ArrayList类,这个ArrayList类的泛型概念是使用继承来实现的。...泛型类 一个泛型类就是具有一个或多个类型变量的类,对于这个类来说,我们只关注泛型,而不会为数据存储的细节烦恼。...a.length / 2]; } } 首先,这个方法是在普通类中定义的,而不是在泛型类中定义的。...然而,这是一个泛型方法,可以从尖括号和类型变量看出这一点。注意,类型变量是放在修饰符的后面,返回类型的前面。 泛型方法可以定义在普通类中,也可以定义在泛型类中。

    33820

    Kotlin 泛型详解

    fun getResult(): R{        ...    } } Java/Kotlin 的泛型实现采用了类型擦除的方式,这与 C# 的实现不同,后者是真·泛型,前者是伪·泛型。...在 Kotlin 当中有一个关键字叫做 reified,还有一个叫做 inline,后者可以将函数定义为内联函数,前者可以将内联函数的泛型参数当做真实类型使用,我们先来看例子: inline fun...最后再给大家提一个点,现在你们知道为什么 in 表示逆变,out 表示协变了吗? 3. 通配符 在Java 中,当我们不知道泛型具体类型的时候可以用 ?...* 不允许作为函数和变量的类型的泛型参数! interface Foo class Bar : Foo // ERROR! * 不能直接作为父类的泛型参数传入!...其他 4.1 Raw 类型 Raw 类型就是对于定义时有泛型参数要求,但在使用时指定泛型参数的情况,这个只在 Java 中有,显然也是为了前向兼容而已。

    1.2K20

    Java泛型详解,史上最全图文详解「建议收藏」

    大家好,又见面了,我是你们的朋友全栈君。 泛型在java中有很重要的地位,无论是开源框架还是JDK源码都能看到它。...泛型的本质是参数化类型,即给类型指定一个参数,然后在使用时再指定此参数具体的值,那样这个类型就可以在使用时决定了。这种参数类型可以用在类、接口和方法中,分别被称为泛型类、泛型接口、泛型方法。...泛型方法概述:把泛型定义在方法上 定义格式: public 泛型类型> 返回类型 方法名(泛型类型 变量名) { } 注意要点: 方法声明中定义的形参只能在该方法里使用,而接口...这里可以看出,泛型方法随着我们的传入参数类型不同,他得到的类型也不同。...实际上编译器不仅关注一个泛型方法的调用,它还会为某些返回值为限定的泛型类型的方法进行强制类型转换,由于类型擦除,返回值为泛型类型的方法都会擦除成 Object 类型,当这些方法被调用后,编译器会额外插入一行

    92030

    java Type 详解

    因为在 Android 开发的过程中, 泛型,反射,注解这些知识进场会用到,几乎所有的框架至少都会用到上面的一两种知识,如 Gson 就用到泛型,反射,注解,Retrofit 也用到泛型,反射,注解 。...但是我们知道 java 泛型在运行的时候是会进行泛型擦除的,那我们要怎样得到在编译时期泛型的信息呢?java 为我们提供了 Type 接口,使用它,我们可以得到这些信息。...不知道什么是泛型擦除的同学可以看一下 类型擦除是指泛型在运行的时候会去除泛型的类型信息。java 中,泛型主要是在编译层次来实现的,在生成的字节码即 class 文件是不包括泛型的 类型信息的。...从只有原始类型扩充了参数化类型、类型变量类型、限定符类型 、泛型数组类型。 为什么会产生泛型擦除的原因 我们知道在 jdk 1.5 以前的时候,是没有 泛型的。...在 jdk 1.5 的时候,才引入了泛型。如果真的在动态运行的时候加入泛型,涉及到 JVM 命令的修改,这无疑是非常致命的。

    70910

    Java泛型的学习和使用

    为什么需要泛型?...,而且极易出现类型转换失败的风险; 但是,泛型的出现解决了这个问题,它不但简化了代码,还提高了程序的安全性;类型转换的错误提前到编译期解决掉; 强制转换 类型转换失败 3....,还必须是带有泛型的异常类; 编译报错 自定义的泛型类并不能继承exception,为什么?...自定义泛型接口、泛型类和泛型方法 5.1 泛型接口 泛型接口 泛型接口 5.2 泛型类 泛型类 值得注意的是,在泛型类中,成员变量不能使用静态修饰,编译报错!...当然,需要区分5.3章节中的情况: 5.3 泛型方法 泛型方法 在泛型方法中,自己定义的泛型变量,与类无关; 6. 通配符与上下界 在我们实际工作中,常见的通配符有3类: 无限定通配符,形式:<?

    1.5K40

    泛型篇

    根据你对这个泛型问题的回答情况,你会得到一些后续提问,比如为什么泛型是由类型擦除来实现的或者给你展示一些会导致编译器出错的错误泛型代码。...这可能是Java泛型面试题中最简单的一个了,当然前提是你要知道Array事实上并不支持泛型,这也是为什么Joshua Bloch在Effective Java一书中建议使用List来代替Array,因为...鉴于此,Java泛型有时也被称为“语法糖”。   这和 C++模板截然不同。在 C++中,模板本质上就是一套宏指令集,只是换了个名头,编译器会针对每种类型创建一份模板代码的副本。...和变量,因为它们会被不同类型参数指定的实例共享。在C++,这些类时不同的,因此类型参数可以用于静态方法和静态变量。   在Java中,不管类型参数是什么,所有的实例变量都是同一类型。...类型参数会在运行时被抹去。在C++中,类型参数不同,实例变量也不同。

    1.1K50

    聊聊Kotlin中的元编程

    描述“数据”的“数据” 我们知道我们的需求也就是程序是通过各种数据构建起来的,这些数据就是指类,函数,变量....等是对现实世界和需求的描述,这就是第一个数据的意思 通过类,变量,函数这些数据去描述需求程序...参数信息又分为这三种:方法的参数信息,方法的返回值信息,泛型的参数信息(也就是参数类型)。...KParameter新增属性:、 可看到通过Kparameter的type属性获取到参数的类型,那么返回值的类型和泛型类型该如何获取呢?...上面讲解KCallable的时候就已经有这两个属性了: 返回值类型:只有方法才有返回值,所以是通过KCallable的returntype属性可以获取到 参数类型:泛型一种是泛型方法还有一种是泛型类。...泛型方法一样通过KCallable的typeParameters获取,在KClass中通过startProjectedType属性获取。

    85440

    解析java泛型(一)

    主要内容如下: 泛型的定义及为什么要使用泛型 定义一个简单的泛型类 定义一个简单的泛型方法 类型参数的限定 泛型内部实现的基本原理 泛型通配符(难点) 泛型的其他实现细节 一、何谓泛型      ...泛型程序设计意味着编写的代码可以被不同中类型的对象重用。...,可以省略类型变量,编译器可以推测出来 三、一个简单的泛型方法      怎么定义泛型类,我们已经介绍过了,接下来我们一起看看泛型方法是如何定义和调用的。...我们都知道java中有编译器和虚拟机,但实际上我们的泛型在这两者看来是不一样的,也就是说,虚拟机是不认识泛型的,而只有我们强大的编译器是认识泛型的。那他们是怎么实现统一的呢?...在java中,无论何时定义了一个泛型,它都会自动生成一个相应的原始类型。我们叫这个过程为:类型擦除。

    92560

    Effective-java-读书笔记之泛型

    要是无法接受这些限制, 可以使用泛型方法(见30条)或者有限制的通配符类型(见31条).不要在新代码中使用原生态类型, 有两个小小的例外:在类文字(class literal)中必须使用原生态类型....所以实践中常常会额外声明一个局部变量来加上这个注解, 以缩小注解范围.第28条 列表(lists)优先于数组(arrays)数组与泛型相比, 有两个重要的不同点:首先:数组是协变的(covariant)...编译器通过检查方法参数的类型来计算类型参数的值, 这个过程叫做类型推导(type inference).利用这个特点, 可以利用静态工厂方法来简化泛型构造器的调用.总而言之, 泛型方法优先于需要客户端来强转参数和返回值的方法...把一个值保存在泛型的可变参数数列中是不安全的.那么为什么声明泛型的数组是非法的, 而这种泛型可变参数声明是合法的呢?...super T> c, T... elements), EnumSet.of(E first, E... rest).这些类库方法是类型安全的.在Java 7之前, 对泛型可变参数的警告只能在客户端通过

    44560

    深入分析Java反射(三)-泛型

    为什么需要擦除类型 在JDK1.5之前,也就是在泛型出现之前,所有的类型包括基本数据类型(int、byte等)、包装类型、其他自定义的类型等等都可以使用类文件(.class)字节码对应的java.lang.Class...,而类型是编程语言的十分基础的特性,引入泛型从项目功能迭代角度看可能需要整个JVM项目做回归测试),这个功能的代价十分巨大,所以Java没有在Java虚拟机层面引入泛型。...值得注意的是,无论泛型符号中有几层嵌套,这个方法仅仅脱去最外层的,之后剩下的内容就作为这个方法的返回值。...等这些泛型参数字面量的表示。...泛型的约束 使用Java泛型的时候需要考虑一些限制,这些限制大多数是由泛型类型擦除引起的。

    1.6K20

    一文打通java泛型

    ---- 为什么要有泛型 生活场景 泛型:标签 举例: 中药店,每个抽屉外面贴着标签 超市购物架上很多瓶子,每个瓶子装的是什么,有标签 泛型的设计背景 集合容器类在设计阶段/声明阶段不能确定这个容器到底实际存的是什么类型的对象...Collection,List,ArrayList 这个就是类型参数,即泛型 泛型的概念 所谓泛型,就是允许在定义类、接口时通过一个标识表示类中某个属性的类 型或者是某个方法的返回值及参数类型。...这个类型参数将在使用时(例如, 继承或实现这个接口,用这个类型声明变量、创建对象时)确定(即传入实 际的类型参数,也称为类型实参)。...JDK1.5改写了集合框架中的全部接口和类,为这些接口、类增加了泛型支持, 从而可以在声明集合变量、创建集合对象时传入类型实参。 那么为什么要有泛型呢,直接Object不是也可以存储数据吗?...在集合中没有泛型时   任何类型都可以添加到集合中:类型不安全 读取出来的对象需要强转:繁琐可能有ClassCastException 在集合中有泛型时 只有指定类型才可以添加到集合中:类型安全 读取出来的对象不需要强转

    18230

    Java 基础常见知识点&面试题总结(下),2022 最新版!

    泛型的使用方式有哪几种? 泛型一般有三种使用方式:泛型类、泛型接口、泛型方法。...1.泛型类: //此处T可以随便写为任意标识,常见的如T、E、K、V等形式的参数常用于表示泛型 //在实例化泛型类时,必须指定T的具体类型 public class Generic{ private...;在 java 中泛型只是一个占位符,必须在传递类型后才能使用。...类在实例化时才能真正的传递类型参数,由于静态方法的加载先于类的实例化,也就是说类中的泛型还没有传递真正的类型参数,静态的方法的加载就已经完成了,所以静态泛型方法是没有办法使用类上声明的泛型的。...关于 transient 还有几点注意: transient 只能修饰变量,不能修饰类和方法。 transient 修饰的变量,在反序列化后变量值将会被置成类型的默认值。

    47940

    【Java提高十五】数组

    这个不同也许在某种程度上说明了数组也普通java类在实现上存在很大的区别,也许可以利用这个区别来使得JVM在处理数组和普通java类时作出区分。...从这个运行结果可以看出,我们亲爱的[I没有生命任何成员变量、成员方法、构造函数、Annotation甚至连length成员变量这个都没有,它就是一个彻彻底底的空类。...通过数组名+有效的下标来确认数据。 ---- 三、性能?请优先考虑数组 在java中有很多方式来存储一系列数据,而且在操作上面比数组方便的多?但为什么我们还需要使用数组,而不是替代它呢?...注意这个参数:T…a,这个参数是一个泛型的变长参数,我们知道基本数据类型是不可能泛型化的,也是就说8个基本数据类型是不可作为泛型参数的,但是为什么编译器没有报错呢?...这是因为在java中,数组会当做一个对象来处理,它是可以泛型的,所以我们的程序是把一个int型的数组作为了T的类型,所以在转换之后List中就只会存在一个类型为int数组的元素了。

    91870

    带着问题高效学Android:关于Java与Kotlin泛型你应该知道的知识点

    阅读本文前,下面先列出几个问题 1.为什么我们需要泛型? 2.如何定义泛型类?如何定义泛型方法? 3.怎么限定类型变量? 4.泛型有什么局限性? 5.泛型类型的继承规则是怎样的?...泛型的本质是为了参数化类型(在不创建新的类型的情况下,通过泛型指定的不同类型来控制形参具体限制的类型)。...5.不能实例化类型变量 6.不能捕获泛型类的实例 不能在静态域或方法中引用类型变量。...或是运行期的CLR中,都是切实存在的,List<int>与List<String>就是两个不同的类型,它们在系统运行期生成,有自己的虚方法表和类型数据,这种实现称为类型膨胀,基于这种方法实现的泛型称为真实泛型...为什么泛型擦除后get不需要类型转换? 因为类型擦除的问题,所以所有的泛型类型变量最后都会被替换为原始类型。

    1.1K00

    Java 泛型

    在J2SE 5.0中引入的这个对类型系统期待已久的增强允许类型或方法在提供编译时类型安全性的同时操作各种类型的对象。它将编译时类型安全性添加到集合框架中,并消除了强制转换的繁琐工作。...Why:为什么要引入泛型? Java 集合框架中的数据元素,是Object类型,也就是可以是任意类型。 在使用集合数据时,需要显式地调用 强制类型转换。...示例,泛型方法会以使用,相关联的参数的共同父类,作为推断类型。不同的集合类型,例如数组和Collection或者其他对象,不能成功推断出类型,会报出编译时错误。...静态 变量和方法,在类的实例之间,也是共享的。这也是不能在静态方法,或者initailizer中引用类型参数的原因。...第二是类型安全。泛型的一个主要目标就是提高Java程序的类型安全,使用泛型可以使编译器知道变量的类型限制,进而可以在更高程度上验证类型假设。

    2.3K51

    Typescript 类型的本质是什么

    类型 类型指的是变量的类型,而变量是一块内存空间,不同类型的变量会占用不同的字节数,而且可以做的操作也不同。number、boolean、string 等类型的变量会占用不同的内存大小。...第二种是带泛型的静态类型系统,泛型也叫类型参数,具体的类型可以通过泛型参数来动态确定,多了一定的灵活性。...首先,函数参数在 ts 类型里就是泛型参数,变量在 ts 类型里也用泛型参数来存储,循环在 ts 类型利用递归来实现,所以就是这样的: 首先定义类型,Item 是重复的目标, n 是个数,然后第三个参数...总结 类型本质上是运行时变量的内存大小和可对它进行的操作,变量只赋值同类型的值就是类型安全,动态类型在源码中没有类型信息,没法保证类型安全,而静态类型则是在源码中有类型信息,可以在编译期间检查出类型的错误...ts 的类型系统是支持泛型、支持高级类型的静态类型系统,而且类型的语法是图灵完备的,也就是各种逻辑都可以表达,只不过和 js 中的语法会有不同。

    1.4K10

    Typescript 类型的本质是什么

    类型 类型指的是变量的类型,而变量是一块内存空间,不同类型的变量会占用不同的字节数,而且可以做的操作也不同。number、boolean、string 等类型的变量会占用不同的内存大小。...第二种是带泛型的静态类型系统,泛型也叫类型参数,具体的类型可以通过泛型参数来动态确定,多了一定的灵活性。...首先,函数参数在 ts 类型里就是泛型参数,变量在 ts 类型里也用泛型参数来存储,循环在 ts 类型利用递归来实现,所以就是这样的: 首先定义类型,Item 是重复的目标, n 是个数,然后第三个参数...总结 类型本质上是运行时变量的内存大小和可对它进行的操作,变量只赋值同类型的值就是类型安全,动态类型在源码中没有类型信息,没法保证类型安全,而静态类型则是在源码中有类型信息,可以在编译期间检查出类型的错误...ts 的类型系统是支持泛型、支持高级类型的静态类型系统,而且类型的语法是图灵完备的,也就是各种逻辑都可以表达,只不过和 js 中的语法会有不同。

    1.6K30
    领券