FULL PRODUCT VERSION :
A DESCRIPTION OF THE PROBLEM :
java.util.Observable should check hasChanged() method to check if it should notify observers or not (as per documentation). But it doesn't call hasChanged() method in notifyObservers(Object arg0) , instead it just checks the instance field "change" in Observable class. check this code line for details :
http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b14/java/util/Observable.java#152
Hence clients can't override behaviour of notifyObservers() method by overriding hasChanged() method.
STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
class CustomObservable extends Observable{
@Override
protected synchronized Boolean hasChanged()
{
return Boolean.False;
}
@Override
public void notifyObservers(Object disbursementEvent)
{
this.setChanged();
super.notifyObservers("notification argument");
}
}
EXPECTED VERSUS ACTUAL BEHAVIOR :
EXPECTED -
observers should not be called as hasChanged() returns false
ACTUAL -
Observers get called irrespective of what overridden hasChanged method returns.
REPRODUCIBILITY :
This bug can be reproduced always.
A DESCRIPTION OF THE PROBLEM :
java.util.Observable should check hasChanged() method to check if it should notify observers or not (as per documentation). But it doesn't call hasChanged() method in notifyObservers(Object arg0) , instead it just checks the instance field "change" in Observable class. check this code line for details :
http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b14/java/util/Observable.java#152
Hence clients can't override behaviour of notifyObservers() method by overriding hasChanged() method.
STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
class CustomObservable extends Observable{
@Override
protected synchronized Boolean hasChanged()
{
return Boolean.False;
}
@Override
public void notifyObservers(Object disbursementEvent)
{
this.setChanged();
super.notifyObservers("notification argument");
}
}
EXPECTED VERSUS ACTUAL BEHAVIOR :
EXPECTED -
observers should not be called as hasChanged() returns false
ACTUAL -
Observers get called irrespective of what overridden hasChanged method returns.
REPRODUCIBILITY :
This bug can be reproduced always.
- duplicates
-
JDK-4514284 notifyObservers() doesn't use hasChanged()
-
- Closed
-