A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 贾联国 于 2012-5-1 02:08 编辑

我总结了一点儿网上的说法,在这里和你分享一下。
1.不应在静态方法中引用封闭类型参数。根据我的看法,在定义一个静态的时候,往往不知道以后输入的的具体类型,而在调用的时候加上参数限定会让程序在类型转换上出问题,例如LZ举的例子,我如果要用多次方法,而 println()方法里的参数不相同,但还是加了泛型 A<String>.println(),A<integer>.println().....,那么在运行的时候会发生ClassCastException!这个貌似没有办法,只能程序员自己注意,不要这么写了。

2.泛型类型参数和基本类型:在学Hashtable的时候,我们将键值对存到Hashtable中的时候可以用new HashMap< String, String>() 进行String到String的映射,但我们很少用HashMap< String, Integer>让int值参加映射,因为本来int值可以自动打包integer的,我们这么定义之后就必须手动打包int值,虽然不会产生异常,却让程序很麻烦。

3.instanceof 操作中的“外露”参数,这个我觉得最为复杂,这里所谓的“外露”是定义在函数主体上的,还拿上面的例子来说,我们要往new HashMap< String, T>() 里面放数据,而条件是instanceOf XXX,我们假设这里的XXX是object,一旦符合要求 ,所有< String, T>都会存到集合中去,关键是这个T,如果这个T是其他的类,例如图形化界面中的Button,那么< String,Button>按理说这里虽然可以存进去,但是我们调用其他不属于Button的方法来执行Button,依然可以编译,jvm可能会给予警告,这里的原因是instanceOf的作用是擦除了Button的类型上限,甚至可以当做object,但运行下去的话,JVM会觉得Button属于object,类型转换很正常,就开始错下去了。这些都是编程需要避免的~

这些就是我对这个泛型的了解啦,我也是刚刚才学到的,希望对你有帮助,话说大半夜写了这么多,求加技术分啊。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马