Java中的泛型类型

时间:2015-01-22 10:05:03

标签: java generics

我认为通用的问题, 一些代码:

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);
}

所以,问题是:由于setValue(currentLevel)类型,我无法使用SokobanGame(在currentLevel中),eclipse告诉我要放置T类型的内容。 ..但我用this.windowElements.get(0).getElement()实例化了new GameStatusBarElement<Integer>("Level:", new ObservableValue<Integer>(1));的类,所以我不明白这是什么问题?

1 个答案:

答案 0 :(得分:1)

一切似乎都很好,但我没有看到getElement()方法的实施。

如果您的getElement()方法与此类似:

public ObservableValue<T> getElement() {
    return element;
}

它应该编译得很好。