用於獲取到B類從C類實例訪問的最簡單的解決辦法是增加一個引用C到B:
C類
public class C {
private String cName;
private B bObj;
}
而然後使用類B中的吸氣劑和吸附劑:
B類
public class B {
private String bName;
private C cObj;
public String getBName() {
return bName;
}
public void setBName(String newName) {
this.bName = newName;
}
}
但是,請記住,這將導致循環依賴,這通常是一個代碼味道(可能在這種情況下是正常不過,這取決於整個類層次結構)。
更好的選擇是執行中的類之間的觀察者模式:
C類
public class C {
private String cName;
private List<Observers> observers; //if you only need one instance, then
//switch out for a single interface reference
public void requestWrapperName() {
List<String> names = new ArrayList<>();
for(observer: observers) {
names.add(observer.requestName());
}
// code to do what you want with wrapper name
...
}
public void addObserver(Observer observer) {
observers.add(obsersver);
}
}
Observer接口
public interface Observer {
String requestName();
}
B類
public class B implements Observer {
private String bName;
private C cObj;
// Observer method
public String requestName() {
return bName;
}
}
現在,當你有C的情況下在B類,你可以注入B中的觀察者與cObj.addObserver(this);
C,然後請求B的名字與方法requestWrapperName();
。因此避免同時存在兩種關聯:)
Java並不是我的主要領域,但是在C類可以讀取任何A或B變量之前,您是否必須將A類和B類導入C類?還有一個持有C類實例的第4個(Main?)類? –
是的,我正在使用android,所以這第四類基本上是我在訪問對象C的Activity。關於導入,是否可以訪問創建當前對象的類的特定實例? –
A類必須'導入classB;'以便'private B someVar;'是有意義的。類B導入類C以創建'objectC'的實例...當類C導入其他兩個類時,您將創建它們的實例。例如:'私人的instA;''所以與'instA'作爲參考您可以訪問變量作爲'myString = instA.aName;'或'myString = instB.bName;'等等的變量... –