2014-05-23 23 views
0

我看到一个前。使用以下类为:Java - PropertyChangeListener

private static PropertyChangeListener listener = new PropertyChangeListener() { 
@Override 
public void propertyChange(PropertyChangeEvent event) { 
    // Method definition 
} 
} 

1)我的第一个问题是,它如何实例化一个接口?

java.beans: Interface PropertyChangeListener 

2)在我见过的大多数例子,他们增加的PropertyChangeSupport(),如以下几点:

public class MyClass{ 
private PropertyChangeSupport pcs; 

public MyClass(PropertyChangeListener listener) { 

    pcs = new PropertyChangeSupport(this); 
    pcs.addPropertyChangeListener(listener); 
}  

public void method() { 
    if (condition) { 
     pcs.firePropertyChange(); 
    } 
} 

}

在我的课,该方法而不是静态方法。

我没有在任何例子中看到,PropertyChangeSupport被定义为静态变量,我不确定它正确的做什么?

是否有任何性能问题B/C它将观察所有类的静态变量?

虽然firePropertyChange()仅适用于其中一个变量。

这是我如何使用它:

public class MyClass{ 
private static PropertyChangeSupport pcs = new PropertyChangeSupport(MyClass.class); 

public static void method(PropertyChangeListener listener) { 

    pcs.addPropertyChangeListener(listener); 

    if (condition) { 
     pcs.firePropertyChange(); 
    } 
} 
} 

我以前是这样的类,但这种方法被称为很多次,我不希望创建一个新的PC对象每次我这个时候打电话方法,所以我改变它像上面 - 定义为静态变量 - 不知道哪种做法更好。

public class MyClass{ 

public static void method(ConcurrentMap map, PropertyChangeListener listener) { 

      // pcs is defined to observe only map. 
    PropertyChangeSupport pcs = new PropertyChangeSupport(map); 

    pcs.addPropertyChangeListener(listener); 

    if (condition) { 
     pcs.firePropertyChange(); 
    } 
} 

}

任何帮助不胜感激。

回答

0

第一个例子是可能的,因为您定义了实现接口的anonymus内部类。

对于剩下的,目前尚不清楚是什么ProperyChangeSupport

我将使用观察者模式http://en.wikipedia.org/wiki/Observer_pattern

所以它会是这个样子

public MyClass implements PropertyChangeSupport { 

    private List<PropertyChangeListener> listener; 

    public void addPropertyChangeListener(PropertyChangeListener) { 
     //add the listener 
    } 

    public void firePropertyChange() { 
     //Handle the property change and iterate over all the listener 
     for(PropertyChangeListener l: listener) { 
      l.propertyChange(new PropertyChangeEvent()); 
     } 
    } 

    public void someMethodThatChangesTheProperty() { 
     //Do whatever you have to do 
     this.firePropertyChange(); 
    } 

} 
+0

我用ProperyChangeSupport添加监听建议更换。当pcs.firePropertyChange();被调用,propertyChange()方法将被调用。 – blueSky

+0

在我的课上someMethodThatChangesTheProperty()是静态的;你打算怎么写呢? – blueSky

+0

使侦听器,addPropertyChaneListener和firePropertyChange也是静态的 – wastl

相关问题