- 浏览: 1067130 次
- 性别:
- 来自: 南京
文章分类
- 全部博客 (501)
- dwr (6)
- javascript (84)
- oracle (66)
- jsp/servlet (18)
- ant (3)
- 基础知识 (12)
- EXT (10)
- My SQL (10)
- java (71)
- spring (37)
- 学习的对象 (2)
- Linux (24)
- 面试 (1)
- HTML/CSS (11)
- tomcat (11)
- 收藏夹 (2)
- Power Designer (2)
- struts.xml配置文件 (1)
- sturts2 (3)
- myeclipse (8)
- eclipse (7)
- Maven (34)
- SVN (3)
- SAP JCO (2)
- JBOSS (11)
- webservice (8)
- word (1)
- 敏捷开发 (1)
- sybase (4)
- Nexus (3)
- EhCache (3)
- log4j (3)
- Cookie (4)
- Session (4)
- CXF (7)
- AXIS (2)
- SSO (1)
- LDAP (1)
- velocity (2)
- Jquery (5)
- redis (2)
- http (4)
- dojo (1)
- Linux资源监控软件mnon的安装与运用 (1)
- notepad++ (1)
- EA (1)
- UML (1)
- JasperReports (1)
- 权限 (0)
- freemarker (4)
- Spring MVC (1)
- JMS (1)
- activeMQ (1)
- hession (3)
- 安全 (1)
- ibatis (2)
- log (1)
- nginx (1)
最新评论
-
winhbb:
我刚好遇到了一个问题(在可以依赖注入的场合有效):有两个模块A ...
解决Maven项目相互依赖/循环依赖/双向依赖的问题 -
nanjiwubing123:
long3ok 写道你好 XmlOutputFormatter ...
用XStream转换复杂XML -
zhoujianboy:
另外一个方法实现eclipse tomcat 热部署:http ...
eclipse下实现maven项目在tomcat容器热部署方法 -
long3ok:
你好 XmlOutputFormatter 请问这个类是在什么 ...
用XStream转换复杂XML -
ganbo:
总结的好,文章给力。
解决Maven项目相互依赖/循环依赖/双向依赖的问题
Jdk1.5中支持了泛型,在泛型的使用过程中经常会遇到这样一类问题
调用的地方
你会发现编译错误,但是在我们的需求中Child的集合类是可以代替Parent的集合类来使用的,但是因为编译器不认同,因为两个集合类之间没有直接的继承关系。如果实现呢?在Jdk1.5的Source中我们找到了答案,随便找一个带有泛型的类,点进去可以看到泛型的定义,例如ArrayList<E> HashMap<K,V> 等等
这里以ArrayList为例:注意addAll这个函数
ok,明白了,这个就是问号的作用.更改我们的函数
类Parent public class Parent { // your code } 类Child public class Child extends Parent { // your code }
调用的地方
import java.util.ArrayList; import java.util.List; import com.test.Child; public class Test { public static void doTest(List < Parent > list) { } public static void main(String[] args) { List < Parent > parentList = new ArrayList < Parent > (); List < Child > childList = new ArrayList < Child > (); doTest(parentList); // 注意这里编译错误 doTest(childList); } }
你会发现编译错误,但是在我们的需求中Child的集合类是可以代替Parent的集合类来使用的,但是因为编译器不认同,因为两个集合类之间没有直接的继承关系。如果实现呢?在Jdk1.5的Source中我们找到了答案,随便找一个带有泛型的类,点进去可以看到泛型的定义,例如ArrayList<E> HashMap<K,V> 等等
这里以ArrayList为例:注意addAll这个函数
public boolean addAll(Collection <? extends E > c) { Object[] a = c.toArray(); int numNew = a.length; ensureCapacity(size + numNew); // Increments modCount System.arraycopy(a, 0 , elementData, size, numNew); size += numNew; return numNew != 0 ; }
ok,明白了,这个就是问号的作用.更改我们的函数
import java.util.ArrayList; import java.util.List; public class Test { // 这里更改一下,利用问号解决问题 public static void doTest(List <? extends Parent > list) { } public static void main(String[] args) { List < Parent > parentList = new ArrayList < Parent > (); List < Child > childList = new ArrayList < Child > (); doTest(parentList); // 注意这里编译正确 doTest(childList) } }
发表评论
-
个人草稿使用
2017-08-19 09:02 0深入理解JVM: http://www.cnblogs.co ... -
Thread.setDaemon详解
2015-04-24 21:31 912java中线程分为两种类型:用户线程和守护线程。通过Threa ... -
怎么使用 ConcurrentHashMap 才能是线程安全的?
2015-04-13 11:54 1510public class test { public ... -
21,tomcat关闭钩子
2014-12-31 10:36 733在很多环境下,在关闭应用程序的时候需要做一些清理工作。问题在于 ... -
Java NIO使用及原理分析 (一) 【转载】
2014-10-24 00:04 492【转载】: http://blog.csdn.net/wuxi ... -
Java 两个集合取交集
2014-10-14 21:16 3140public static Set intersectionS ... -
Calendar类roll和add的区别
2014-10-10 22:28 499import java.text.SimpleDateForm ... -
Gson通过借助TypeToken获取泛型参数的类型的方法
2014-09-30 00:26 633[size=medium]最近在使用Goo ... -
HashMap的遍历效率讨论
2014-09-27 20:41 838经常遇到对HashMap中的key和value值对的遍历操作, ... -
Java 泛型
2014-06-26 12:44 864关键字说明 ? 通配符类型 <? extends T&g ... -
Java泛型集合的理解
2014-06-26 00:05 511[size=medium]什么是泛型? 泛型(Generic ... -
关于java字节码框架ASM的学习
2014-06-19 19:22 894一、什么是ASM ASM是一个java字节码操纵框架, ... -
Java动态代理详解
2014-06-19 17:41 867Java动态代理详解: http: ... -
Java内存,字符串文章收集
2014-06-18 16:24 738java--String常量池问题的几个例子 . http:/ ... -
Java内存解析
2014-06-18 11:48 782栈、堆、常量池等虽同 ... -
Java的堆与非堆内存
2014-01-07 10:59 723堆(Heap)和非堆(Non-heap)内存 按照官方的说法: ... -
JMX 资料收集
2014-01-07 10:53 473JavaSky的专栏 http://blog.csdn.net ... -
JAVA 注解示例 详解
2013-11-12 09:36 828注解(Annotation) 为我们在代码中天界信息提供了 ... -
Java 泛型详解
2013-11-11 22:35 834http://www.360doc.com/content/1 ... -
Java中的Enum的使用与分析
2013-11-09 12:49 824enum枚举类型:在实际问 ...
相关推荐
JDK1.5引入的泛型技术极大地增强了Java语言的灵活性和安全性,通过参数化类型、泛型类和泛型算法,开发者可以编写更加通用且类型安全的代码。理解和熟练掌握泛型的使用,对于提高Java开发者的编程技能和软件质量有着...
到目前为止,Java 类库中泛型支持...就像容器类是 C++ 语言中模板的主要动机一样改善集合类的类型安全是 Java 语言中泛型的主要动机。集合类也充当如何使用泛型的模型,因为它们演示了泛型的几乎所有的标准技巧和方言。
泛型允许我们在类、接口和方法中定义类型参数,这样就可以在编译时检查类型安全,并且可以消除在运行时进行类型转换的需要。泛型的主要优点有: 1. **类型安全性**:泛型确保了只有正确类型的对象可以被添加到集合...
泛型允许程序员在类、接口和方法中使用类型参数,使得容器(如ArrayList、LinkedList等)可以保存特定类型的元素,避免了强制类型转换的麻烦,并且在编译阶段就能发现可能的类型错误。 1. **泛型的基本概念**: - ...
- 泛型接口和泛型类可以作为参数传递,利用协变和逆变的概念,增强代码的兼容性。 8. 泛型与继承: - 泛型类的子类可以选择继承父类的类型参数,或者指定自己的类型参数。 - 泛型方法的重写需要保持类型参数的...
泛型允许开发者在类、接口和方法中声明类型参数,从而实现对数据类型的抽象。在泛型的帮助下,开发者可以在编译时进行类型检查,避免了运行时的ClassCastException。 在没有泛型的情况下,集合(如ArrayList)通常...
在泛型使用中,如果尝试将非指定类型的对象放入泛型集合,编译器会报错,防止了“野指针”问题的发生。 **泛型与多态** 泛型方法和泛型类可以体现多态性,一个泛型方法可以接受不同类型参数,只要满足类型参数的...
super Number"表示任何能接受Number作为参数的类型。 6. **边界限制**:可以为类型参数设置边界,如`public class Box<T extends Comparable<T>> {...}`,这样T就必须是Comparable的实例。 7. **类型擦除**:Java...
泛型允许我们在类、接口和方法中使用类型参数,这样在编译时期就能检查类型匹配,减少运行时类型转换异常。 1. **泛型的基本概念** - 泛型的本质是在类、接口或方法中使用类型参数,让它们能够处理多种数据类型。...
在没有泛型的情况下,程序员可能会遇到类型不确定的问题,尤其是在处理集合(如数组或集合框架)时。例如,如果使用`Object`类型的数组来存储各种不同类型的对象,那么在取出元素时就需要显式地进行类型转换。这种...
1. **泛型的概念**:泛型是一种参数化类型,意味着可以在定义类、接口或方法时使用类型参数,而不是具体的类型。这样,同一个类或方法可以适用于多种数据类型。 2. **类型参数**:在创建泛型类或方法时,我们使用尖...
JDK 5.0 中增加的泛型类型,是 Java 语言中类型安全的一次重要改进。但是,对于初次使用泛型类型的用户来说,泛型的某些方面看起来可能不容易明白,甚至非常奇怪。在本月的“Java 理论和实践”中,Brian Goetz 分析...
泛型的通配符使用也是泛型机制的一部分,它允许在泛型类或接口的类型参数中使用一个问号(?)来代表任何类型。通配符主要用于表示未知的类型参数,或者表示类型参数的集合。常见的通配符使用场景包括使用List<? ...
JDK1.5的泛型实现.pdf
泛型是 JDK 1.5 最重要的改进之一,它允许在定义集合类时指定元素类型,从而在编译时就能进行类型检查。这样可以防止运行时的 ClassCastException,增加代码的类型安全性。例如,使用泛型,我们可以创建一个只存储 ...
7. **泛型和多态**:泛型类可以作为其他泛型类或非泛型类的参数,实现方法的多态性,比如`List<List<String>>`。 8. **限制性泛型**:通过泛型约束,可以限制类型参数必须遵循的规则,如`public class Box...
4. **泛型**:泛型允许我们在类、接口和方法中声明类型参数,从而创建可以处理多种类型的集合。例如,ArrayList中的E就是一个类型参数,代表某种具体的对象类型。泛型可以限制集合中元素的类型,防止不兼容类型的...
泛型的引入是为了解决对象容器类(如集合)中可能出现的类型转换异常,提高了代码的可读性和安全性。 在Java中,泛型并不像C++中的模板那样在运行时存在,而是通过一种称为类型擦除的技术实现的。这意味着在编译后...