最近在看Struts2的源码,但由于基础不够好(只有两年Java经验),看起来很吃力,源码中的代码组织与设计,以及一些编程思想对我来说很新颖,而且有不少知识是我没有接触过的,比如下面这种泛型:
interface InjectorFactory<M extends Member & AnnotatedElement> { Injector create( ContainerImpl container, M member, String name ) throws MissingDependencyException; }
泛型我了解一些,但还比较浅,像上面这种用法我还是第一次见,而且也难以搜索到相关的博客,一般介绍泛型的博客也都流于表面。所以想在这里请教一下各位,这倒底是什么道理?那个&操作符是什么意思?谢谢了...
错了,刚看了下是
下面的方法中将要用到一个符号M来表示泛型,而这个泛型表示的具体类型,必须同时实现 Member 和 AnnotatedElement接口
刚刚解答 http://www.iteye.com/problems/87940 直接给你了 不明白的再回复问
泛型的目的:参数化类型,并且保证编写代码的正确性和安全性;
1、参数化类型
如我有一个数据结果List,这是一个有序列表,如果没有泛型,我可能这么来实现:
IntList、DoubleList --->每个类型都需要一个
或者
ObjectList --->Object是所有类型的超类,可能造成数据混乱,引起代码错误;
我们知道 List的算法骨架都是一样的,只是操作的数据不一样(如Int、Long……),因此呢,我们把这个数据类型参数化:
List ---->T表示泛型形参,类似于方法的形参
我们使用时可以通过 List Integer就是实参;
这样的好处我们只有一个List数据结构,仅仅是数据不同。
2、编码的安全性和正确性
没有泛型时
List 可以存放任意的Object类型,既Integer、Long等都行,我们可能放入不正确的数据,造成程序异常;
有了泛型之后,我们在写代码时
List<Integer> 只能放Integer类型
3、你的这个List 和List 其实没什么区别,建议改成 List 这样就只能往里放UserVo 这个类型的数据。
泛型的作用就是限制存入集合中元素的类型
至于这个
InjectorFactory
那就是本类接受 继承 Member的类,或者这个类是AnnotatedElement类型的
建议: 百度搜索“黑马训练营” 然后去下载视频 “java基础增强” 中有泛型的详细讲解 张孝祥讲的很好