2011-11-28 99 views
3

如何從類B中的方法更新類A中的對象而不使用返回?Java - 從另一個類更新對象

例如:

public class A { 
//my main class 

private javax.swing.JTextField txtField1; 
//a text field (txtField1) is initialized in this class and drawn 

} 


public class B { 

public void doSomething(){ 

    //does something and updates the txtField1 in class A 

} 

} 

,並再次,我不希望使用回報,因爲我的回報已經從同一個方法返回另一個值。

回答

4

有許多你可以做到這一點。最簡單的是將對象傳遞給方法在B類:

public void doSomething(JTextField fieldToUpdate){ 
    //your logic here 
    fieldToUpdate.setText("something"); 
} 

然後,你可以直接更新fieldToUpdate。這不是一個很好的設計模式,因爲它將一個類所擁有的變量直接暴露給另一個類。

另一種方法是A類的實例傳遞到方法,並呼籲公衆方法就可以了:

public void doSomething(A aInstance){ 
    //your logic here 
    aInstance.setText("something"); 
} 

然後在A類你需要定義

public void setText(String text){ 
    txtField1.setText(text); 
} 

這是稍好一些,因爲B類不能直接訪問A類內部。

一個更封裝的響應(雖然這可能是過度簡單的)細接口,並通過一個實現中類B的接口的方法的類的一個實例:

public void doSomething(TextDisplayer txt){ 
    //your logic here 
    txt.setText("something"); 
} 

然後在此類一個:

public class A implements TextDisplayer{ 

public void setText(String txt){ 
    txtField1.setText(txt); 
} 

} 

則接口:

public interface TextDisplayer{ 
public void setText(String txt); 
} 

這種方法的優點是它使類B與類A完全分離。所有它關心的是它傳遞了一些知道如何處理setText方法的東西。再次,在這種情況下,它可能是矯枉過正,但它是讓你的課儘可能分離的方法。

+0

謝謝你的回答。如果aInstance位於循環內部怎麼辦?我如何確保它從setText方法返回doSomething方法? – jadrijan

0

您或者需要調用類A中的方法,或者使文本字段爲靜態(壞主意)。

根據用途,類A可以將B實例化爲揮杆工/等。並給出B它需要的具體信息。它也可能是另一種方式,B實例化一個`A.

0

假設您在A中有一個公共setter方法來更改txtField1的值。 (因爲你要更改的屬性有關鍵字「私人」)

一說,你有

public void setTxtField1Value(String newValue){ 
this.txtField1.value=newValue; // using the right method in api. I am not familiar with gui.. 
} 

然後在B,該方法是:

public class B { 

public void doSomething(A a){ 

    //does something and updates the txtField1 in class A 
a.setTxtField1Value("foobar"); 

} 
} 
+0

謝謝你的回答。如果a.setTxtField1Value(「foobar」);是在一個循環內?如何確保在循環爲true時從setTxtField1Value方法返回doSomething方法? – jadrijan