是否有标准或最佳实践方法来了解POJO (Plain Old Java Object)是否具有PropertyChangeSupport?
发布于 2014-01-16 03:36:16
是否有标准或最佳实践方法来了解POJO (Plain Old Java Object)是否具有PropertyChangeSupport?
PropertyChangeSupport类通常用于实现bean类中的属性更改支持,因此我怀疑您真正想知道的是是否有一种方法可以查看bean类是否支持注册PropertyChangeListeners。
以下面的示例bean类为例:
class Bean {
private String name;
private final PropertyChangeSupport pcs = new PropertyChangeSupport(this);
public String getName() {
return this.name;
}
public void setName(String name) {
String oldName = this.getName();
this.name = name;
this.pcs.firePropertyChange("name", oldName, name);
}
public void addPropertyChangeListener(PropertyChangeListener listener) {
this.pcs.addPropertyChangeListener(listener);
}
public void removePropertyChangeListener(PropertyChangeListener listener) {
this.pcs.removePropertyChangeListener(listener);
}
}您可以使用Introspector类来查询bean,并确定它是否提供属性更改侦听器的注册,例如:
boolean supportsPropertyChangeListener = false;
BeanInfo info = Introspector.getBeanInfo(Bean.class);
EventSetDescriptor[] descriptors = info.getEventSetDescriptors();
for (EventSetDescriptor descriptor : descriptors) {
if (descriptor.getListenerType().equals(PropertyChangeListener.class)) {
supportsPropertyChangeListener = true;
}
}
System.out.println(supportsPropertyChangeListener);发布于 2012-05-23 01:21:07
我想不出一种标准的方法,但一种方法是使用反射并迭代您的类的属性,看看是否有PropertyChangeSupport类型。
例如:
Field[] fields = clazz.getDeclaredFields();
for(Field field : fields) {
if(field. getType().equals(PropertyChangeSupport.class)) {
//do whatever you have to do
}
}https://stackoverflow.com/questions/10706833
复制相似问题