亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

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

為什么在java.lang.Object中保護clone()方法?

為什么在java.lang.Object中保護clone()方法?

慕少森 2019-07-30 11:11:48
為什么在java.lang.Object中保護clone()方法?clone()定義為受保護的具體原因是java.lang.Object什么?
查看完整描述

3 回答

?
慕妹3242003

TA貢獻1824條經驗 獲得超6個贊

克隆被保護的事實是非??梢傻?- 因為該clone方法未在Cloneable接口中聲明。

這使得該方法對于獲取數據副本毫無用處,因為您無法說

if(a instanceof Cloneable) {
    copy = ((Cloneable) a).clone();}

我認為,設計Cloneable是現在很大程度上被視為一個錯誤(以下引文)。我通常希望能夠實現接口Cloneable不一定要創建接口Cloneable(類似于使用Serializable)。沒有反思就無法做到這一點:

ISomething i = ...if (i instanceof Cloneable) {
   //DAMN! I Need to know about ISomethingImpl! Unless...
   copy = (ISomething) i.getClass().getMethod("clone").invoke(i);}

來自Josh Bloch的Effective Java的引用:
“Cloneable接口旨在作為一個mixin接口,用于對象宣傳它們允許克隆。不幸的是它無法達到此目的......這是一種非常非典型的接口使用,而不是一個被模擬的接口...為了實現接口對類產生任何影響,它和它的所有超類必須服從一個相當復雜,不可執行且基本上沒有文檔的協議 “


查看完整回答
反對 回復 2019-07-30
?
江戶川亂折騰

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

clone是受保護的,因為它應該被覆蓋,以便它特定于當前類。雖然可以創建一個clone克隆任何對象的公共方法,但這不如專門針對需要它的類編寫的方法那么好。


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

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

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

公眾號

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