首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

又论泛型

2012-10-26 
再论泛型?h1span langen-uswhy/spanspan,java为什么需要泛型?/span/h1h1span langen-

再论泛型
    ?
<h1><span lang="en-us">why</span><span>,java为什么需要泛型?</span></h1>
<h1><span lang="en-us">how</span><span>,擦除,一种折中方案</span></h1><p name="code">list<string > list = new arrarylist<string>();list.add(“cantellow”);int integer = list.get(0);//compile error?
<span>然后,将参数化类型中的类型参数</span><span lang="en-us">"</span><span>擦除</span><span lang="en-us">"</span><span>(</span><span lang="en-us">erasure</span><span>)掉,并且将类型变量用</span><span lang="en-us">"</span><span>上限(</span><span lang="en-us">upper bound</span><span>)</span><span lang="en-us">"</span><span>取代,通常情况下这些上限是</span><span lang="en-us"> object</span><span>。这里的类型变量是指实例域,本地方法域,方法参数以及方法返回值中用来标记类型信息的</span><span lang="en-us">"</span><span>变量</span><span lang="en-us">"</span><span>,例如:实例域中的变量声明</span><span lang="en-us">?a elem;</span><span>,方法声明</span><span lang="en-us">?node (a elem){};</span><span>,其中,</span><span lang="en-us">a </span><span>用来标记</span><span lang="en-us"> elem </span><span>的类型,它就是类型变量。</span>
<p name="code">list<integer> li = new arraylist<integer>(); list<number> ln = li; // illegal ln.add(new float(3.1415)); ?
<span>因为</span><span lang="en-us">?ln</span><span>是</span><span lang="en-us">?list<number></span><span>,所以向其添加</span><span lang="en-us">?float</span><span>似乎是完全合法的。但是如果</span><span lang="en-us">?ln</span><span>是</span><span lang="en-us">?li</span><span>的别名,那么这就破坏了蕴含在</span><span lang="en-us">?li</span><span>定义中的类型安全承诺</span><span lang="en-us"> —— </span><span>它是一个整数列表,这就是泛型类型不能协变的原因。</span>
<h2><span>获取泛型类型</span></h2><p class="msonormal"><span>更多信息可以参考讨论:</span><span lang="en-us">http://www.iteye.com/topic/585900</span> 

热点排行