java泛型

Wesley13 等级 139 0 0

一、实现机制
java泛型实现方法为类型擦除,基于这种方法实现的泛型称为伪泛型。
java泛型只在源代码中存在,在编译后的文件中替换为原生类型,并插入强制转换。
(真正的泛型是应该存在于源码、编译后文件、运行期)

二、擦除实例
源码:
List testList = new ArrayList();
testList.add("abcd");
System.out.println(testList.get(0));
编译后:
List testList = new ArrayList();
testList.add("abcd");
System.out.println((String)testList.get(0));

三、重载实例(1)
源码:
private void overLordTest(List list) {
    System.out.println(list.size());
}
private void overLordTest(List list) {
    System.out.println(list.size());
}
不能通过编译,因为编译后参数类型是一样的。

四、重载实例(2)
源码:
private String overLordTest(List list) {
    return “overLordTest”;
}
private void overLordTest(List list) {
    System.out.println(list.size());
}
可以通过编译并正常运行(有警告),与java返回值 不参与重载冲突?【用sun JDK1.6编译】
Class文件格式中,只要描述符不是完全一致的两个方法就可以共存。
用JDK1.7/JDK1.8编译报错,是否能运行与调用其中几个方法有关。

五、思考
真正泛型会是什么样?与多态有什么区别和联系?

收藏
评论区

相关推荐

死磕Java泛型(一篇就够)
Java泛型,算是一个比较容易产生误解的知识点,因为Java的泛型基于擦除实现,在使用Java泛型时,往往会受到泛型实现机制的限制,如果不能深入全面的掌握泛型知识,就不能较好的驾驭使用泛型,同时在阅读开源项目时也会处处碰壁,这一篇就带大家全面深入的死磕Java泛型。 泛型擦除初探相信泛型大家都使用过,所以一些基础的知识点就不废话了,以免显得啰嗦。
Dart中的泛型、泛型方法、泛型类、泛型接口
一、Dart中的泛型 泛型方法 通俗理解:泛型就是解决 类 接口 方法的复用性、以及对不特定数据类型的支持(类型校验) 一般用   T   表示泛型 getData<T(T value){ return
我丢,去面试初级Java开发岗位,被问到泛型?
1、泛型的基础概念 1.1 为什么需要泛型 c List list new ArrayList();//默认类型是Object list.add("A123"); list.add("B234"); list.add("C345"); System.out.println(list);
C#泛型
现在的netcore 3.1和最新的.netframework8早已经没有当初那个被人诟病的ArrayList了,但很巧这玩意不得不说,因为它决定了C#团队痛改前非,抛弃过往重新上路,上一段ArrayList案例代码。 public class ArrayList { private object[]
C#非泛型集合和泛型集合的超级详解(转)
C# 泛型集合之非泛型集合类与泛型集合类的对应: ------------------------ ArrayList对应List HashTable对应Dictionary Queue对应Queue Stack对应Stack SortedList对应SortedList ###  转自(https://www.cnblogs.com/cheng
Java 泛型
命名类型参数 推荐的命名约定是使用大写的单个字母名称作为类型参数。这与 C++ 约定有所不同(参阅 附录 A:与 C++ 模板的比较),并反映了大多数泛型类将具有少量类型参数的假定。对于常见的泛型模式,推荐的名称是: K —— 键,比如映射的键。 V —— 值,比如 List 和 Set 的内容,或者 Map 中的值。 E
Java中ArrayList的向上转型问题(父类与子类的关系)
果然是java都没学好,今天写方法的时候想把方法参数写成List<父类>,然后传子类进去统一处理,结果发现报错。 丢人地百度了: ArrayList<ChildClass>();包括泛型在内的整个作为类型是无法强转成ArrayList<FatherClass>  如果想这样使用 可以使用 extends 关键字来限制泛型参数的适用范围  List<T
Java泛型的使用
### 泛型的定义: 泛型,就是允许在定义类、接口时通过一个标识表示类中某个属性的类型或者是某个方法的返回值及参数类型。这个类型参数将在使用时(例如,继承或实现这个接口,用这个类型声明变量、创建对象时)确定(即传入实 际的类型参数,也称为类型实参)。 ### 泛型的引入背景: 集合容器类在设计阶段或声明阶段不能确定这个容器到底实际存储的是什么类型的对象
Java泛型详解
**引言** ------ Java泛型是jdk1.5中引入的一个新特性,泛型提供了编译时的类型检测机制,该机制允许程序员在编译时检测到非法的类型。 泛型是Java中一个非常重要的知识点,在Java集合类框架中泛型被广泛应用。本文我们将从零开始来看一下Java泛型的设计,将会涉及到通配符处理,以及让人苦恼的类型擦除。 **泛型基础** --------
Java进阶学习(3)之对象容器(上)
对象容器 * 顺序容器 * 记事本的例子 * UI设计和业务逻辑要分离 * 接口设计 * add(String note); * getSize(); * getNote(int index);
java 泛型详解
对java的泛型特性的了解仅限于表面的浅浅一层,直到在学习设计模式时发现有不了解的用法,才想起详细的记录一下。 本文参考java 泛型详解、Java中的泛型方法、 java泛型详解 1\. 概述 泛型在java中有很重要的地位,在面向对象编程及各种设计模式中有非常广泛的应用。 什么是泛型?为什么要使用泛型? 泛型,即“参数化类型”。一提到参数,最熟
java泛型
一、实现机制 java泛型实现方法为类型擦除,基于这种方法实现的泛型称为伪泛型。 java泛型只在源代码中存在,在编译后的文件中替换为原生类型,并插入强制转换。 (真正的泛型是应该存在于源码、编译后文件、运行期) 二、擦除实例 源码: List<String> testList = new ArrayList<String>();
java泛型总结
###1. 特点, 好处 java1.5后出现 包含1.5版本 泛型的出现 解决程序的安全性 保证程序的一致安全机制 使用泛型 避免了类型的强制类型转换 代码就简单 数据类型只能是 应用类型 **不能使基本类型,且前后保持一致** 泛型的 定义格式: > 集合类<数据类型>变量 = new集合类<数据类型>(); ###2. 定义使用
Thinking in java Chapter15 泛型
* 1 与C ++比较 * 2 简单泛型 泛型 类 * 3 泛型 接口 * 4 泛型 方法 * 5 匿名内部类 * 6 构建复杂模型 * 7 * 8 * 9 * 10 “泛型”意思就是:适用于许多许多的类型 <h2 id="1">1 与C++比较 </h2> ------------------------- C
TypeScript Generics(泛型)
软件工程的一个主要部分就是构建组件,构建的组件不仅需要具有明确的定义和统一的接口,同时也需要组件可复用。支持现有的数据类型和将来添加的数据类型的组件为大型软件系统的开发过程提供很好的灵活性。 在C#和Java中,可以使用"泛型"来创建可复用的组件,并且组件可支持多种数据类型。这样便可以让用户根据自己的数据类型来使用组件。 **泛型的简单案例** 首先,