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

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

在 Java 中使用子對(duì)象作為父對(duì)象屬性是不好的做法嗎?

在 Java 中使用子對(duì)象作為父對(duì)象屬性是不好的做法嗎?

慕的地6264312 2021-12-10 09:57:22
例如,我有一個(gè)名為 entity 的類,它看起來像public class Entity {   private User userCreated;   private Date dateCreated;   private User userModified;   private Date dateModified;}然后我有我的 User 類,它實(shí)際上是 Entity 的子類public class User extends Entity {    private String username;}我感覺關(guān)系中有一個(gè)循環(huán),但是對(duì)象在我的系統(tǒng)中以這種方式相關(guān),因?yàn)槲宜械臄?shù)據(jù)都是一個(gè)實(shí)體,我所有的實(shí)體都是由用戶創(chuàng)建的,包括我的用戶,所以我的用戶是一個(gè)實(shí)體。我已經(jīng)測(cè)試了代碼并且它有效,我的問題是,這種設(shè)計(jì)是否糟糕?如果它不好,有沒有更好的方法來實(shí)現(xiàn)它?
查看完整描述

3 回答

?
慕少森

TA貢獻(xiàn)2019條經(jīng)驗(yàn) 獲得超9個(gè)贊

一般來說,這沒有什么不好。如果基類包含需要了解其所有子類的邏輯(例如,為了決定在某些方法調(diào)用中返回哪個(gè)實(shí)例),這只是一種不好的做法,因?yàn)檫@可能會(huì)破壞基類(或強(qiáng)制它更新)任何時(shí)候引入新的子類。

另一方面,JDK 本身包含引用其子類的類的示例。

例如(雖然這可能有點(diǎn)作弊),Object該類包含對(duì)Stringand 的引用Class,它們是它的子類。

如果你的階級(jí)關(guān)系需要它,它沒有錯(cuò)。


查看完整回答
反對(duì) 回復(fù) 2021-12-10
?
POPMUISE

TA貢獻(xiàn)1765條經(jīng)驗(yàn) 獲得超5個(gè)贊

一般來說,你不想要雙向依賴,也不希望基類知道它的子類,但只是相反,因?yàn)樗鼈兌伎赡茉陬愔g創(chuàng)建強(qiáng)耦合,即任何一方的變化都可能有雙方的后果。

但這并不意味著您不想使用這種耦合。

有時(shí)這種耦合是不可取的,但有時(shí)是可取的,在這里它似乎是一種可取的耦合:父級(jí)和子級(jí)在語義上非常耦合,因此以后您想要隔離用戶或?qū)嶓w的可能性很小他們之間更加獨(dú)立。

所以你接受甚至希望這種耦合避免沒有價(jià)值的重復(fù)/復(fù)雜性。


請(qǐng)注意,您可以通過引入一個(gè)接口來定義實(shí)體來解耦事物,但是很多代碼無法獲得一個(gè)偉大的東西:


public interface EntityAble {

   User getUserCreated();

   Date getDateCreated();

   User getUuserModified();

   Date getDateModified();

  // setters

}

定義實(shí)體,例如:


public class Entity implements EntityAble {

   private User userCreated;

   private Date dateCreated;

   private User userModified;

   private Date dateModified;

   // override getters/setters

}

和用戶為:


public class User implements EntityAble {

   private String username;      

   private User userCreated;

   private Date dateCreated;

   private User userModified;

   private Date dateModified;

   // override getters/setters  

}

現(xiàn)在 Entity 由 User 字段組成,這些字段不是 Entity 而是大量重復(fù)/ LOC 不一定會(huì)有所收獲。

在某些用例中,這種設(shè)計(jì)可能有意義,但對(duì)于您的實(shí)際需求來說,這聽起來是一種開銷。


查看完整回答
反對(duì) 回復(fù) 2021-12-10
?
寶慕林4294392

TA貢獻(xiàn)2021條經(jīng)驗(yàn) 獲得超8個(gè)贊

在我看來,它本身并沒有什么壞處。


這實(shí)際上只是“對(duì)象可以包含自己?jiǎn)??”這個(gè)問題的略微修改版本。兩種情況的答案都是一樣的——是的,沒關(guān)系。


例如,鏈表中的節(jié)點(diǎn)將包含對(duì)下一個(gè)和上一個(gè)節(jié)點(diǎn)的引用,例如:


class Node

{

    private Node next;

    private Node previous;

}

這個(gè)設(shè)計(jì)沒有什么不好。


在你的情況,User 是一種Entity,只是更專業(yè)。上面例子的類比可能是Nodeand BranchedNode。


但是,您可能要考慮的一件事是,如果用戶要求用戶創(chuàng)建它們,那么哪個(gè)用戶將創(chuàng)建第一個(gè)用戶?有點(diǎn)雞和蛋的情況。也許第一個(gè)用戶將擁有userCreated和userModified等于空?或者他們會(huì)指向自己?


查看完整回答
反對(duì) 回復(fù) 2021-12-10
  • 3 回答
  • 0 關(guān)注
  • 201 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)