`
suigara
  • 浏览: 82317 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

java知识整理-(1)泛型generics

    博客分类:
  • java
 
阅读更多
泛型(generics) :带参数化类型的类或接口,比如最熟悉的List<E>。读做list of E。
原始类型(raw type):泛型中不包括尖括号的部分,上面的例子中的List
 parameterized types :尖括号中的部分,例子中的E,可以是任何接口或者类。
从1.5开始支持的。为了可读性和类型安全。

但是个人感觉有时比较繁琐,特别是用不好的时候。
特别是java的泛型又让你感觉比较奇怪。。。。

最开始认识是从List<T>接口开始的。

后来自己也写过几个,特别是DAO。

通过学习,知道了类型擦除。但为什么要擦除呢?
自己推测了一下:
Java的一个非常好的特点就是向下兼容。
如果不类型擦除,Foo(List<Integer>)和Foo(List<String>)可以重载,那么List<Integer>.class和List<String>.class必定不同。
这样的话对jvm已有的类型系统是个很大的冲击。(个人认为这是最重要的原因)


知道了类型擦除,很多东西就想明白了,比如,Foo(List<Integer>)和Foo(List<String>)不可以重载,因为擦除后都变成了Foo(List)。

通过javap证实了这点,但--
在类头文件却发现了泛型的信息,记录了类成员的泛型实际类型。
查了资料,知道了可以通过反射取得使用处的实际类型。
如 private List<Integer> list ; // 通过反射可以获得Integer

更高一级的就是通配符“?”了;
之前知道List<? extends XXX> list;只能读,不能写,而不知道其原因。
看了effective java 2nd后,知道了PECS:producer-extends, consumer-super。
关于<? extends XXX>看list.addAll就全明白了。List<Object>可以addAll List<Integer>的集合。



前段时间看了论坛的帖子,学到了协变和逆变,结合PECS,对泛型的理解又加深了一些。

虽然现在感觉理解的很不错,但我知道,随着以后的使用、学习、思考,会发现现在知道的不过是一些皮毛。

记录于此,供以后回头看看。

分享到:
评论

相关推荐

    java基础教程----精华版

    这个"java基础教程----精华版"显然是一份精心整理的资料,旨在帮助初学者快速掌握Java编程的基础知识。下面将详细介绍Java语言的核心概念和关键知识点。 1. **Java语法基础**: - **变量**:在Java中,变量是存储...

    Java终极面试题(2010整理版)

    以下是一些基于给定标题和描述的Java知识点的详细解释: 1. **访问修饰符的区别**: - `public`:所有类都能访问。 - `private`:只有当前类能访问。 - `protected`:当前类、同一包内和子类可访问。 - 默认...

    JAVA复习题目.pdf

    - 在Java 5之后引入的一些新特性,如泛型(Generics)等。 以上内容涵盖了Java编程语言的核心知识点。例如,文档中提到的public static void main(String[] args)是Java程序的入口点,用于执行程序。文档还包含多...

    java框架整理

    以下是对Java框架整理的一些关键知识点: 1. **静态(static)与实例(his)依赖**: - `static` 关键字用于声明类级别的变量和方法,不依赖于类的实例,可以在没有创建对象的情况下直接调用。 - `his` 是实例...

    Java基础增强

    - 泛型(Generics):允许在编译时进行类型检查,提供更好的类型安全性。 - 自动装箱/拆箱(Autoboxing/Unboxing):自动将基本数据类型转换成对应的包装类,反之亦然,简化了代码。 - 可变参数(Varargs):使得...

    Java练习题库(含答案及解析).pdf

    Java中的泛型(Generics)允许在编译时提供类型检查和类型转换,可以用于创建可重用的通用类和方法,提高代码的可读性和安全性。 Java中的输入/输出(I/O)处理是通过java.io包中的类和接口来实现的。它包括用于...

    JAVA复习题7.pdf

    8. Java的基础和高级特性:文档中可能包含了基础语法和一些高级特性,如泛型(Generics)、继承(Inheritance)、接口(Interfaces)、和内部类(Inner Classes)等。 9. Java的数值和字符串操作:文档中包含了一些...

    【肘子的Swift笔记】博文中的代码汇总.zip

    - 泛型(Generics):允许创建可以处理多种类型的函数或类型。 - 可选链(Optional Chaining):`?.`操作符用于访问可选值的属性或方法,如果可选值为nil则不执行后续操作。 - 值类型与引用类型:Swift中的结构体...

    java学习资料

    笔记内容可能涵盖了从基础语法到高级特性的全面讲解,对于初学者或者希望巩固Java知识的人来说都是有益的。 在Java的学习过程中,首先会接触到的是基础概念,例如类(Class)、对象(Object)、封装(Encapsulation...

    java复习题单选题及答案.pdf

    在Java编程语言中,有许多重要的知识点...以上内容涵盖了Java编程语言中的核心概念,包括类、对象、接口、泛型、控制流、数组、字符串操作、数据类型转换、方法重载、面向对象特性以及编译和运行Java程序的基础知识。

    scala学习笔记整理

    在"scala学习笔记整理"中,我们可以深入探讨以下关键知识点: 1. **基础语法**:Scala的基础语法与Java有相似之处,但也有很多独特的特点。例如,它支持变量的不可变性(immutability),使用`val`声明常量,`var`...

    Advane_Java_Codes:这是我的学生的私人资料库

    描述部分与标题重复,再次确认了这是一个Java相关的代码集合,可能是为了教学、学习或者个人参考目的而整理的。"Advane_Java_Codes"的提及暗示了这可能包含了进阶的Java编程概念和技术,可能包括多线程、网络编程、...

Global site tag (gtag.js) - Google Analytics