好久不见>_< 转载 java有关泛型方法重载
2017-09-16 20:36
225 查看
转载!!!!!!!!!!!!!!!!!!!!!!!!!!!
好久不见 哈哈哈
最近闲了下来 学了好多新东西,这两天公司的事情又突然多了,争取国庆节前全部整理好
当泛型遇到了重载,好戏,就发生了。
请看下面代码:
问题:代码能正确编译吗?
这个题目是一个考察泛型的题目。java里面,泛型实际上是“伪泛型”,并不像C#那样是实际上的泛型。
IDE会提示我们下面的错误:
Methodtest(List<String>) has the same erasure test(List<E>) as anothermethod in type TR
在java中,泛型只存在于源代码之中,在编译过后的代码中,泛型信息已经被“擦除”了。上面的代码被编译之后的样子应该是下面类似的代码:
两个函数具有相同的签名,当然编译器会拒绝为我们编译这样的代码。
在java这种伪泛型中,List<String>和List<Integer>,编译之后,是相同的类型。
但是在c#这种真实泛型中,上面两个就是不同的类型了。
故事到这里就结束了吗??显然没有
------------------------------------昏昏咯咯-------------------------------------
看下面代码:
问,这段代码能正常编译吗?
熟悉class文件结构的人能知道,这段代码能正常编译(重载成功了!)。而且还能正常执行呢!!!
代码输出:
integer
string
疑问来了。jvm规定,函数的返回值并不参与“函数签名”的生成,那么仅仅改变了函数返回值,从而让不能编译的代码通过了编译并且能正常执行了,这不是很矛盾吗?
原因在于,虽然函数的返回值不参与函数签名的生成,但是在class文件中,只要描述符不完全一致的两个方法就能共存于一个class文件中。
【java代码中,函数的特征签名仅仅包括方法名称、参数类型以及参数顺序。但在字节码中,特征签名还包括了方法的返回值以及受查异常表,这就是为什么在class文件中,其他都相同仅仅返回值不同的两个方法能共存的原因】
好久不见 哈哈哈
最近闲了下来 学了好多新东西,这两天公司的事情又突然多了,争取国庆节前全部整理好
当泛型遇到了重载,好戏,就发生了。
请看下面代码:
问题:代码能正确编译吗?
这个题目是一个考察泛型的题目。java里面,泛型实际上是“伪泛型”,并不像C#那样是实际上的泛型。
IDE会提示我们下面的错误:
Methodtest(List<String>) has the same erasure test(List<E>) as anothermethod in type TR
在java中,泛型只存在于源代码之中,在编译过后的代码中,泛型信息已经被“擦除”了。上面的代码被编译之后的样子应该是下面类似的代码:
两个函数具有相同的签名,当然编译器会拒绝为我们编译这样的代码。
在java这种伪泛型中,List<String>和List<Integer>,编译之后,是相同的类型。
但是在c#这种真实泛型中,上面两个就是不同的类型了。
故事到这里就结束了吗??显然没有
------------------------------------昏昏咯咯-------------------------------------
看下面代码:
问,这段代码能正常编译吗?
熟悉class文件结构的人能知道,这段代码能正常编译(重载成功了!)。而且还能正常执行呢!!!
代码输出:
integer
string
疑问来了。jvm规定,函数的返回值并不参与“函数签名”的生成,那么仅仅改变了函数返回值,从而让不能编译的代码通过了编译并且能正常执行了,这不是很矛盾吗?
原因在于,虽然函数的返回值不参与函数签名的生成,但是在class文件中,只要描述符不完全一致的两个方法就能共存于一个class文件中。
【java代码中,函数的特征签名仅仅包括方法名称、参数类型以及参数顺序。但在字节码中,特征签名还包括了方法的返回值以及受查异常表,这就是为什么在class文件中,其他都相同仅仅返回值不同的两个方法能共存的原因】
相关文章推荐
- [Java 10 泛型] 泛型通配符 Info<?> i = new Info<String>(); 在程序中定义没有方法的接口,称之为标识接口
- Java<>泛型方法
- [Java 10 泛型] 泛型通配符 Info<?> i = new Info<String>(); 在程序中定义没有方法的接口,称之为标识接口
- Java 包含泛型方法签名的方法调用,如: <K, V> Map<K, V> buildHashMap()
- 方法重载(overload)的例子分析(摘自<深入理解Java虚拟机>)
- Java中泛型集合List<T>反序列化问题及解决方法
- Java笔记(8)-泛型、链表、LinkedList<E>、Iterator迭代器、Collections类方法、堆栈、HashMap<K,V>、TreeSet<E>、自动装箱和拆箱
- java 泛型 class<T> 创建方法
- Java List<>排序——重载Collections.sort方法
- Java环境的搭建<转载>
- Java 基础一些代码练习笔记( GenericFoo<T> 泛型2)
- 在main函数执行之前和执行之后执行的方法<转载>
- Java中使用hql,sql查询返回的list<Object> 转成需要的实体对象--方法讲解!
- java中addAll(Collection<? extends E> col)方法实例
- <转载>突破 Sql 防注入过滤程序继续注入的一点方法
- <转载>在C#中利用Keep-Alive处理Socket网络异常断开的方法
- BaseDao<T extends Serializable> 泛型类、泛型接口、泛型方法
- 类的索引器<索引器可以像方法一样重载>(一步步集合案例分析)
- 艾伟_转载:数组排序方法的性能比较(中):Array.Sort<T> 实现分析
- <转载>java中的集合