2012-05-22 81 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);