Привет!Я относительно новичок как в GWT, так и в Java-программировании (или ООП в этом отношении), поэтому заранее извиняюсь за вопросы / ошибки для начинающих.Я пытался создать какой-то шаблон наблюдателя, но консоль режима разработки продолжает сбрасывать сообщения об ошибках, и, к сожалению, они далеко не полезны.
Итак, вот что я пытаюсь достичь: - ЯУ меня есть модель, которая состоит из класса Country и хранит значение, называемое Influence.- Представление является классом с именем CountryDisplay.Это виджет GWT, который всегда должен отображать текущее влияние данной страны.
public class Country {
private int influece;
private CountryDisplay display;
public Country() {
influence = 0;
}
public void setDisplay(CountryDisplay display) //...
public int getInfluence() //...
public void setInfluence(int value) {
influence = value;
display.update();
}
}
public class CountryDisplay {
private Country country;
public CountryDisplay (Country country) {
//GWT widget creating stuff
this.country = country;
}
public void update() {
//InfluenceCounter is a simple Label
InfluenceCounter.setText(Integer.toString(country.getInfluence()));
}
}
Затем в классе EntryPoint я делаю что-то вроде этого:
Country italy = new Country();
CountryDisplay italyDisplay = new CountryDisplay(italy);
italy.setDisplay(italyDisplay);
RootPanel.get("nameFieldContainer").add(italyDisplay);
italy.setInfluence(3);
Консоль разработки показала, чтовозникла проблема со строкой "display.update ();"в классе Страна.Мое первое предположение состояло в том, что проблема заключалась в том, что отображение не было инициировано, поэтому я создал для него интерфейс, а в конструкторе Country я создал пустой новый дисплей, который впоследствии будет перезаписан.
public Country() {
influence = 0;
display = new DisplayInterface() {
public void update() {}
}
}
Но мне тоже не повезло.Я думаю, что такого рода перекрестные ссылки не допускаются?Я имею в виду, что представление имеет модель в качестве переменной и наоборот.При индивидуальном вызове метода для представления (например,
italy.setInfluence(3);
italyDisplay.displayTheCurrentValue();
) он работает, поэтому проблема определенно заключается в логике наблюдателя.