Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/356.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/42.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
测试Java Bean是否具有PropertyChangeSupport_Java_Events_Javabeans - Fatal编程技术网

测试Java Bean是否具有PropertyChangeSupport

测试Java Bean是否具有PropertyChangeSupport,java,events,javabeans,Java,Events,Javabeans,有没有一种标准或最佳实践方法可以知道POJO(普通旧Java对象)是否具有PropertyChangeSupport?我想不出一种标准方法,但有一种方法是使用反射并迭代类的属性,以查看是否有PropertyChangeSupport类型的属性 例如: Field[] fields = clazz.getDeclaredFields(); for(Field field : fields) { if(field. getType().equals(PropertyChangeSupport

有没有一种标准或最佳实践方法可以知道POJO(普通旧Java对象)是否具有PropertyChangeSupport?

我想不出一种标准方法,但有一种方法是使用反射并迭代类的属性,以查看是否有
PropertyChangeSupport类型的属性

例如:

Field[] fields = clazz.getDeclaredFields();

for(Field field : fields) {
   if(field. getType().equals(PropertyChangeSupport.class)) {
      //do whatever you have to do
   }
}
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);
是否有标准或最佳实践方法来了解POJO(普通 旧Java对象)是否具有PropertyChangeSupport

PropertyChangeSupport
类通常用于在bean类中实现属性更改支持,因此我怀疑您真正想知道的是,是否有一种方法可以查看bean类是否支持注册
propertychangeslisteners

以下面的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);
    }
}
您可以使用该类查询bean并确定它是否提供属性更改侦听器的注册,例如:

Field[] fields = clazz.getDeclaredFields();

for(Field field : fields) {
   if(field. getType().equals(PropertyChangeSupport.class)) {
      //do whatever you have to do
   }
}
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);