プロジェクトで BetterBeanBindings を使用していますが、キーが文字列ではない Map に対してバインディングを実行できれば素晴らしいと思います。
状況を説明する例を見てみましょう。
public class Bean {
// ...
private Map<String, AnotherObject> mapOne;
private Map<SomeObject, AnotherObject> mapTwo;
// ...
public Map<String, AnotherObject> getMapOne() {
return this.mapOne;
}
public void setMapOne(Map<String, AnotherObject> mapOne) {
Map<String, AnotherObject> oldMapOne = this.mapOne;
this.mapOne = mapOne;
this.propertyChangeSupport.firePropertyChange("mapOne", oldMapOne, mapOne);
}
public Map<SomeObject, AnotherObject> getMapTwo() {
return this.mapTwo;
}
public void setMapTwo(Map<SomeObject, AnotherObject> mapTwo) {
Map<SomeObject, AnotherObject> oldMapTwo = this.mapTwo;
this.mapTwo = mapTwo;
this.propertyChangeSupport.firePropertyChange("mapTwo", oldMapTwo, mapTwo);
}
// ...
}
BBB は、キーが文字列であるマップに対してバインドを行うことができます (標準的な解析を行う基本型でさえないことを覚えていれば、数字に対しても可能です)。
Bean bean;
// ...
Bindings.createAutoBinding(UpdateStrategy.READ_WRITE
bean, BeanProperty.create("mapOne.xxx"),
whateverBean, whateverProperty);
bean.getMapOne().get("xxx")
これにより、結果が5 番目と 4 番目のパラメーターで指定されたオブジェクトの指定されたプロパティに適切にバインドされます。
しかし、同じことを試してみるとmapTwo
Bindings.createAutoBinding(UpdateStrategy.READ_WRITE
bean, BeanProperty.create("mapTwo.xxx"),
whateverOtherOrNotBean, whateverOtherOrNotProperty);
bean.getMapTwo().get("xxx")
それはプロパティの定義で提供されたものであり、返さmapTwo
れる ではない可能性があるため、バインディングは解決しようとします。バインディングは、解決のためにプロパティから必要なオブジェクトに変換する方法を知る必要がないため、これは理にかなっています。String
null
String
これを行うオプションはありますか?コンバーターを使用して何らかの回避策があるのではないでしょうか?