通用类型使用,在 Java
Generic type use, in Java
我想我对一般用途有疑问,
部分代码:
public class ObservableValue<T> extends Observable {
private T value;
public ObservableValue(T initial) {
setValue(initial);
}
public void setValue(T newValue) {
if (value != newValue) {
this.value = newValue;
setChanged();
notifyObservers(value);
}
}
}
public class SokobanGame implements Game, Observer {
protected final ArrayList<GameStatusBarElement<Integer>> windowElements;
public void nextLevel(Integer currentLevel){
this.windowElements.get(0).getElement().setValue(currentLevel);
for(GameStatusBarElement<Integer> element : windowElements)
element.update();
}
}
public class GameStatusBarElement<T> {
protected final ObservableValue<T> element;
public GameStatusBarElement(String elementText,
ObservableValue<T> observableValue) {
this.element = observableValue;
}
}
并且在主要实现中:
GameStatusBarElement<Integer> level = new GameStatusBarElement<Integer>("Level:", new ObservableValue<Integer>(1));
GameWindow gameWindow = new GameWindow("",
null, null, level);
}
所以,问题是:由于 currentLevel
类型,我无法使用 setValue(currentLevel)
(在 SokobanGame
中),eclipse 告诉我用 T
放一些东西类型...但是我用 new GameStatusBarElement<Integer>("Level:", new ObservableValue<Integer>(1));
实例化了 this.windowElements.get(0).getElement()
的 class,所以我不明白这是什么问题?
一切似乎都很好,但我没有看到您的 getElement()
方法的实现。
如果您的getElement()
方法是这样的:
public ObservableValue<T> getElement() {
return element;
}
它应该编译得很好。
我想我对一般用途有疑问, 部分代码:
public class ObservableValue<T> extends Observable {
private T value;
public ObservableValue(T initial) {
setValue(initial);
}
public void setValue(T newValue) {
if (value != newValue) {
this.value = newValue;
setChanged();
notifyObservers(value);
}
}
}
public class SokobanGame implements Game, Observer {
protected final ArrayList<GameStatusBarElement<Integer>> windowElements;
public void nextLevel(Integer currentLevel){
this.windowElements.get(0).getElement().setValue(currentLevel);
for(GameStatusBarElement<Integer> element : windowElements)
element.update();
}
}
public class GameStatusBarElement<T> {
protected final ObservableValue<T> element;
public GameStatusBarElement(String elementText,
ObservableValue<T> observableValue) {
this.element = observableValue;
}
}
并且在主要实现中:
GameStatusBarElement<Integer> level = new GameStatusBarElement<Integer>("Level:", new ObservableValue<Integer>(1));
GameWindow gameWindow = new GameWindow("",
null, null, level);
}
所以,问题是:由于 currentLevel
类型,我无法使用 setValue(currentLevel)
(在 SokobanGame
中),eclipse 告诉我用 T
放一些东西类型...但是我用 new GameStatusBarElement<Integer>("Level:", new ObservableValue<Integer>(1));
实例化了 this.windowElements.get(0).getElement()
的 class,所以我不明白这是什么问题?
一切似乎都很好,但我没有看到您的 getElement()
方法的实现。
如果您的getElement()
方法是这样的:
public ObservableValue<T> getElement() {
return element;
}
它应该编译得很好。