我看到了一个前任。对类使用以下内容:
private static PropertyChangeListener listener = new PropertyChangeListener() {
@Override
public void propertyChange(PropertyChangeEvent event) {
// Method definition
}
}1)我的第一个问题是它如何实例化一个接口?
java.beans: Interface PropertyChangeListener2)在我见过的大多数示例中,他们添加了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();
}
}
}我的类过去是这样的,但是这个方法被调用了很多次,我不想每次调用这个方法时都创建一个新的pcs对象,所以我像上面一样改变了它-改为定义为静态变量-不确定哪种做法更好。
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();
}
}}
任何帮助都是非常感谢的。
发布于 2014-05-24 05:06:50
第一个示例是可能的,因为您定义了一个实现接口的匿名内部类。
对于其余的部分,还不清楚ProperyChangeSupport是什么
我建议您使用ObserverPattern 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();
}
}https://stackoverflow.com/questions/23838280
复制相似问题