6

为什么下面的代码会抛出UnsupportedOperationException

import javafx.beans.property.MapProperty;
import javafx.beans.property.SimpleMapProperty;


public class TestMapProperty {
    static MapProperty<String, String> model = new SimpleMapProperty<String, String>();


    public static void main(String[] args) {
        model.put("blue", "green"); // exception thrown here
    }
}

堆栈跟踪:

Exception in thread "main" java.lang.UnsupportedOperationException
    at java.util.AbstractMap.put(AbstractMap.java:203)
    at javafx.beans.binding.MapExpression.put(MapExpression.java:277)
    at TestMapProperty.main(TestMapProperty.java:10)
4

2 回答 2

8

Pace 的答案仍然有效,但如果您想要一个 Property 而不仅仅是 ObservableMap,那么这不是正确的代码。

static MapProperty<String, String> model = new SimpleMapProperty<String, String>(FXCollections.observableHashMap());

会更合适。您仍然需要使用新的 ObservableMap 实例来初始化 SimpleMapProperty。没有 SimpleMapProperty 初始 Map 的构造函数不会为您创建一个。这是因为您可以选择自己的 ObservableMap 实现来支持属性。

于 2015-02-27T09:31:02.637 回答
3

如果你真的想创建一个可观察地图的实例,你应该使用

ObservableMap<String,String> model = FXCollections.observableHashMap();
于 2012-12-21T18:17:20.710 回答