我想知道如何在java中識別組合和聚合代碼。我有C++代碼,但我不明白如何在Java中編寫代碼。如何在java中編寫組合和聚合
聚集通過指針
class A {};
class B { A composited_A; };
組成
class A {};
class B
{
A* pointer_to_A;
B(A anA){
pointer_to_A = &anA;
}
誰能告訴我如何都在Java工作。 (我知道什麼是組成和聚合的意思) };
我想知道如何在java中識別組合和聚合代碼。我有C++代碼,但我不明白如何在Java中編寫代碼。如何在java中編寫組合和聚合
聚集通過指針
class A {};
class B { A composited_A; };
組成
class A {};
class B
{
A* pointer_to_A;
B(A anA){
pointer_to_A = &anA;
}
誰能告訴我如何都在Java工作。 (我知道什麼是組成和聚合的意思) };
Java本身根本就沒有組成和聚合之間的區別。您不能在Java類型系統中表達引用的所有權概念 - 如果您明確需要表示所有權,則必須使用其他方法(通常簡單地通過構造將存儲在類實例中的新對象)來表示這一點。
由於Java具有GC,所以內存所有權根本不需要表示;內存僅由GC擁有和管理。當然,對於其他資源也是如此,在這裏您可能仍然想要表達所有權。
在Java中,對象只能被指針引用。這意味着A
類型的字段實際上是對A
對象的引用。這也意味着該字段將始終以空指針開始,並且您必須將其明確指定給new A()
或其他任何內容。
編輯:
class B {
A a;
B(A a) {
this.a = a;
}
B() {
this(new A());
}
}
我認爲這是用Java代碼表示組合和聚合的最佳方式。
組成
public class Person
{
private final Name name;
public Person (String fName, String lName)
{
name = new Name(fName, lName);
}
//...
}
聚集
public class Person
{
private Costume currentClothes;
public void setClothes(Costume clothes)
{
currentClothes = clothes;
}
//...
}
謝謝。但是你能否在java代碼中提供一個例子。 – Mifas 2012-03-25 17:31:31
謝謝。這是聚合嗎? – Mifas 2012-03-25 17:37:13
這取決於你如何使用'a'。通常情況下,如果意圖是組合,你可以使'a'成爲'final',這樣它就永遠不會改變,然後確保它在構造函數中被分配了一個非空值。如果意圖是聚合,你可以提供一個'setA()'方法來改變'a'。 – 2012-03-25 17:40:36