我讀叫MyClass的 代碼這樣的父類,如何在這種情況下重構或修復循環引用? java的
public class MyClass extends CompositeObject{
protected Map<String,MyAttibute> attributes = new
HashMap<String,MyAttribute>
.....
}
在MyAttribute類, 這樣的代碼
public class MyAttibute extends MyObject
{
private MyClass definedOnClass;//point to its parentClass
}
這實際上是一個圓形reference.Which製造麻煩,當你做深度serlization和平等。它可能不是一個好的設計。如何避免它?修復後,我們仍然可以很容易地從它的屬性中找到父類。
P.S.我看到另外兩個班的設計
public class Transaction{
private ChangeManager parentManager;
....
public Transaction(ChangeManager parentManager)
}
public class ChangeManager {
//record transaction when commit
private List<Transaction> transactions = new ArrayList<Transaction>();
Transaction currentTransaction;
....
}
你覺得這種設計好嗎?爲什麼? 正如你可以看到這些類定義的域是相當普遍的。 那麼任何人都可以分享一些關於它的見解嗎?讓事務知道其ChangeManager並讓MyAttributes知道其屬性中的MyClass有害嗎?歡迎任何評論。缺點和優點。
如果我理解你正確的父類有一個裁判,當equals方法對自己的孩子? (對於我來說這並不完全清楚,所以如果情況並非如此,那麼可以忽略它)哦,天哪,這絕對不是好主意 - 序列化的問題只是一個可怕設計之上的糖霜。一個班級永遠不需要或不需要知道孩子的孩子 – Voo
@ Voo,我們在處理序列化時遇到了這個問題。但數據模型不是由我們設計的。所以這是問題。 –
好的,這個問題不是很清楚(尤其是「這是一個很好的設計?」部分) - 應該更多地沿着「我們如何解決這個可怕的設計」這個問題;)但是如果definedOnClass是它自己的子類,我沒有看到你如何解決它(在這種情況下,沒有遞歸的基本情況);如果不是,它應該正常工作,我會想 - 確切的錯誤是什麼? – Voo