2012-05-22 45 views

回答

0

我想不出一种标准的方法,但一种方法是使用反射并遍历您的类的属性,以查看是否有任何类型为PropertyChangeSupport

例如:

Field[] fields = clazz.getDeclaredFields(); 

for(Field field : fields) { 
    if(field. getType().equals(PropertyChangeSupport.class)) { 
     //do whatever you have to do 
    } 
} 
1

是,有一个标准或最佳实践方式来了解一个POJO(普通 Java对象)拥有的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);