为什么以下代码抛出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)
答案 0 :(得分:4)
Pace的答案仍然有效,但是如果你想要一个属性而不仅仅是一个ObservableMap,那么这不是正确的代码。
static MapProperty<String, String> model = new SimpleMapProperty<String, String>(FXCollections.observableHashMap());
会更合适。您仍然需要使用新的ObservableMap实例初始化SimpleMapProperty。没有SimpleMapProperty的初始Map的构造函数将不会为您创建一个。这是因为您可以选择自己的ObservableMap实现来支持Property。
答案 1 :(得分:2)
如果您确实想要创建可观察地图的实例,则应使用
ObservableMap<String,String> model = FXCollections.observableHashMap();