Java-当泛型遇到重载
来源:互联网 发布:js根据id删除div 编辑:程序博客网 时间:2024/05/16 08:27
请看下面代码:
public class GenericTypes {public static void method(List<String> list){//类型擦除 变成原生类型List list
System.out.println("method(List<String> list)");
}
public static void method(List<Integer> list){
System.out.println("method(List<Integer> list)");
}
}
这个题目是一个考察泛型的题目。Java里面,泛型实际上是“伪泛型”,编译不通过
IDE会提示我们下面的错误:
Erasure of method method(List<String>) is the same as another method in type GenericTypes
在java中,泛型只存在于源代码之中,在编译过后的代码中,泛型信息已经被“擦除”了。上面的代码被编译之后的样子应该是下面类似的代码:
public class GenericTypes {
public static void method(List<T> list){
System.out.println("method(List<String> list)");
}
public static void method(List<T> list){
System.out.println("method(List<Integer> list)");
}
}
两个函数具有相同的签名,当然编译器会拒绝为我们编译这样的代码。
请再看下面一个例子
看下面代码:
public class GenericTypes2 {
public static String method(List<String> list){//类型擦除 变成原生类型List list
return "string";
}
public static Integer method(List<Integer> list){
return 1;
}
}
这段代码能正常编译吗?
熟悉class文件结构的人能知道,这段代码能正常编译(重载成功了!)。而且还能正常执行
【请注意 重载成功 仅限于jdk1.6及以下,jre1.7 是编译不通过的 】
原因在于,虽然函数的返回值不参与函数签名的生成,但是在class文件格式之中,只要描述符不完全一致的两个方法就能共存于一个class文件中。
- Java-当泛型遇到重载
- 当泛型遇到重载
- 当泛型遇到重载
- 当泛型遇到重载
- 当泛型遇到了重载
- Java重载遇到泛型
- 当泛型遇见重载
- 当函数重载遇到函数指针
- 当函数重载遇到函数默认值、函数指针
- 当Editplus遇到Java的Scanner
- 当Editplus遇到Java的Scanner
- Java重载,当参数为null时,调用情况
- java中当finally遇到return的处理方式
- 当Ruby遇到Java,勇敢地跨越边界吧
- 当Ruby遇到Java,勇敢地跨越边界吧
- java菜鸟问题记录当遇到--started with null constructor
- 当JAVA遇到有双引号的String怎么办?
- Java杂记——当枚举遇到switch
- Activity+Fragment选项卡整理(二)
- oracle学习笔记----在线修改redo.log文件的大小
- Redis配置
- layout对齐属性总结
- MySQL压缩包的安装
- Java-当泛型遇到重载
- 文章标题
- Android换肤框架
- 第一章:android新手教程关于配置环境变量等.
- 自定义checkbox样式
- 模式的秘密——策略模式
- 使用Spring Boot来加速Java web项目的开发
- 分数
- Jarkata Common Email