我已經在Java程序的某個類中創建了一個對象的實例。我如何將該對象的同一個實例傳遞給另一個類?如何將創建的對象傳遞給另一個類Java
我是否需要做一些類似於在原始類中創建某種類型的getter方法以將對象傳遞給其他類的方法?
我已經在Java程序的某個類中創建了一個對象的實例。我如何將該對象的同一個實例傳遞給另一個類?如何將創建的對象傳遞給另一個類Java
我是否需要做一些類似於在原始類中創建某種類型的getter方法以將對象傳遞給其他類的方法?
「傳遞」它,你需要一種方法或其他類的構造函數可以接受它:
public class Other {
// either
public Other(MyClass obj) {
// do something with obj
}
// or
public void method(MyClass obj) {
// do something with obj
}
}
然後調用構造函數/方法:
MyClass x = new MyClass();
Other other = new Other();
other.method(x);
您可以通過其他類的構造函數傳遞該對象。
簡單的例子:
Class A{
}
Class B{
A a;
public B(A obj){
this.a=obj
}
}
讓我們假設你想A
類的對象傳遞給B
類。現在你已經創建的對象是這樣的:
A object = new A();
現在在你的B
類,可以編寫接受A
對象的方法。它應該是public
,如果你願意,你可以使它成爲static
。
如果你想通過object
到B
,你必須要做些什麼,對吧?所以你應該相應地給你的方法命名。您可能想要在B
中指定一個類型爲A
的字段(我們將其稱爲fieldA
)。 (也許不是你想要的,但我會用這個例子)
讓我們來看看方法:
public void setFieldA (A a) { fieldA = a; }
您可以調用此方法如下:
anObjectOfClassB.setFieldA (object);
當然,如果它是靜態的,你不需要anObjectOfClassB
。
有很多方法將一個對象的引用傳遞給另一個對象。最簡單和最常見的方式有:
setFoo(Foo foo)
設置「foo」屬性或addFoo(Foo foo)
。然後有各種更復雜的模式,其中對象使用發佈/訂閱,回調,期貨等傳遞。
最後有一些技巧可以用來跨越抽象邊界「走私」對象......這通常是一個壞主意。
你說getter,但我會建議你使用setter(或在構造函數中傳遞它)。 –
請注意,您的問題的答案還取決於模型中的線程數。如果你的程序是單線程的,你收到的答案都是合適的。但是,如果您希望將對象傳遞給另一個線程,則必須考慮數據一致性的同步。通常,您希望發送到其他線程的對象必須「安全發佈」以確保接收線程不會收到過時的或不一致的數據。 – scottb