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

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

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

3.3K10

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

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

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

十问,你能扛住吗?

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

1.1K10

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

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

32620

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 类型,当这些方法被调用后,编译器会额外插入一行

77130

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

1.1K50

Java学习和使用

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

1.5K40

聊聊Kotlin中元编程

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

79540

java Type 详解

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

68310

解析java(一)

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

88960

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之前, 对可变参数警告只能在客户端通过

42160

深入分析Java反射(三)-

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

1.5K20

一文打通java

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

15230

带着问题高效学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.2K51

【Java提高十五】数组

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

89870

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

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

46240

Typescript 类型本质是什么

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

1.6K30

Typescript 类型本质是什么

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

1.4K10

扫码

添加站长 进交流群

领取专属 10元无门槛券

手把手带您无忧上云

扫码加入开发者社群

相关资讯

热门标签

活动推荐

    运营活动

    活动名称
    广告关闭
    领券