在E3中,以下是创建IObservableValue
的正确方法:
modelObservable = PojoObservables.observeDetailValue((IObservableValue) this.model, this.property, null);
// or
modelObservable = PojoObservables.observeValue(this.model, this.property);
然后您可以通过以下方式从此modelObservable
中获取财产:
String property = ((IBeanObservable) modelObservable).getPropertyDescriptor().getName();
现在使用E4,创建IObservableValue
的正确方法是:
modelObservable = PojoProperties.value(this.property).observeDetail((IObservableValue) this.model);
// or
modelObservable = PojoProperties.value(this.property).observe(this.model);
但是,方法getPropertyDescriptor()
现在返回null。如何以一般方式获取此modelObservable
的属性?
答案 0 :(得分:0)
我能做的最好的就是这种方法:
public static final String findProperty(final IObservable target) {
String property = null;
if (target instanceof IBeanObservable) {
final PropertyDescriptor desc = ((IBeanObservable) target).getPropertyDescriptor();
property = desc == null ? null : desc.getName();
}
if (property == null && target instanceof DecoratingObservableValue) {
property = getPropertyOfDecorator((DecoratingObservableValue<?>) target);
}
return property;
}
private static String getPropertyOfDecorator(DecoratingObservableValue<?> target) {
try {
final Field decoratedField = DecoratingObservableValue.class.getDeclaredField("decorated");
decoratedField.setAccessible(true);
final Object decorated = decoratedField.get(target);
if (decorated != null) {
return findProperty((IObservable) decorated);
}
return null;
} catch (final Exception e) {
e.printStackTrace();
return null;
}
}