2015-12-04 100 views
0

什麼是更好的方法:通過構造函數傳遞一個對象並將其保存到另一個類中的新引用,或者通過構造函數直接傳遞給方法?有什麼區別嗎?通過構造函數在java中傳遞對象

class A 
{ 
    int a; 
    int b; 
} 

class B 
{ 
    public A refA; 

    public B(A refA) 
    { 
    this.refA = refA; 
    methodInB(refA); 
    } 

    public void methodInB(A refA) 
    { 
    ... 
    } 
} 

OR ------------------------------------------ --------或

class A 
{ 
    int a; 
    int b; 
} 

class B 
{ 
    public B(A refA) 
    { 
    methodInB(refA); 
    } 

    public void methodInB(A refA) 
    { 
    ... 
    } 
} 
+2

你需要的任何東西存儲的參考?兩種情況都是直接將參考傳遞給方法。實際上最好是少存儲。 – zapl

+2

你需要'B'嗎?如果是,請設置它。如果沒有,不要。沒有「首選」方式,因爲它們是兩個不同的片段。 – Maroun

+0

取決於具體情況。一般來說,我認爲第一個是首選。類應該封裝他們的行爲。但是,在這種情況下,您正在*調用來自ctor的可重寫方法。這是不好的做法。 'methodInB()'應該是私有的或最終的。 – markspace

回答

0

這取決於A是B的組成部分還是不同於methodInB。如果我們不把A的引用放在B中,那麼methodInB就變成了一種實用方法,它最好是靜態的。如果它不是實用程序,那麼它對A有依賴性,而A的參考應該放在B.

另外,如果B中有其他方法可能需要相同的A實例進行操作,最好保留A的參考保存在B.

如果methodInB充當一個實用程序,那麼它應該放在一個實用程序類中,帶有靜態修飾符,帶有A和B類型參數。下面

檢查:

public class A { } 
public class B { } 

public class MyUtility { 
    public static void methodInB(A a, B b) { 
     //operate on a and b 
    } 
} 

// MyUtility can also have a dependency on A and B both and thus make methodInB a non static methodInB 
public class MyUtilityBean { 
    private A a; 
    private B b; 

    public void methodInB() { 
     //operate on a and b 
    } 
} 

//Other wise A acts as a dependency of B 

public class B { 
    private A a; 
    public void methodInB() { 
     //operate on a 
    } 
} 
相關問題