簡體   English   中英

測試Java Bean是否具有PropertyChangeSupport

[英]Test if a Java Bean have PropertyChangeSupport

是否有標准或最佳實踐的方法來了解POJO(普通的舊Java對象)是否具有PropertyChangeSupport?

是否有標准或最佳實踐的方法來了解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);

我想不出標准的方法,但是一種方法是使用反射並遍歷類的屬性以查看是否有任何類型為PropertyChangeSupport

例如:

Field[] fields = clazz.getDeclaredFields();

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM