第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

java泛型協(xié)方差

java泛型協(xié)方差

一只萌萌小番薯 2019-07-23 15:03:42
java泛型協(xié)方差我無法理解以下文章:http: //www.ibm.com/developerworks/java/library/j-jtp01255.html下,泛型不是協(xié)變的作者說,因為ln是一個List,所以添加一個Float似乎是完全合法的。但是如果ln與li混淆,那么它將破壞li定義中隱含的類型安全承諾 - 它是一個整數列表,這就是泛型類型不能協(xié)變的原因。我無法理解它所說的“如果ln與li混淆”的部分。作者對別名的含義是什么?(參考?)。引用行上方的代碼片段似乎說明了什么在java中是非法的而不是為什么。如果有人能用一個例子來解釋,對我來說會很有幫助。提前致謝。
查看完整描述

3 回答

?
皈依舞

TA貢獻1851條經驗 獲得超3個贊

List<Integer> li = new ArrayList<Integer>();List<Number> ln = li; // illegalln.add(new Float(3.1415));

在Java中,Integer繼承自Number (java.lang.Number),因此直觀地說,任何Integer (java.lang.Integer)都是一個數字,但是那篇文章指出的是,泛型它不能以這種方式工作,因為考慮到這個例子,你最終會放一個浮點數(這是一個數字)成a List<Integer>,這是非法的,因為float不是整數。

結論:泛型不是協(xié)變的。

注意:我建議您閱讀Effective Java(第2版)第5章:泛型。


查看完整回答
反對 回復 2019-07-23
?
小唯快跑啊

TA貢獻1863條經驗 獲得超2個贊

如果你能做這樣的事情:

List<Float> foo;List<Object> bar;foo = new ArrayList<Float>();bar = foo;foo.add(1.0f);bar.add("Hello");

事情會非常錯誤。在這個例子中,bar是foo的別名,如果你能做到這一點,你將失去類型安全性,這是泛型存在的主要原因。


查看完整回答
反對 回復 2019-07-23
?
蕪湖不蕪

TA貢獻1796條經驗 獲得超7個贊

public class vechicle {void drive(){}}class car extends vechicle{
        //Covariance
    vechicle getObject(){
        return new car();
    }
        //contravariance
    car getmyObject(){
        return (car) new vechicle(); 
    }}


查看完整回答
反對 回復 2019-07-23
  • 3 回答
  • 0 關注
  • 432 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號