Я пытаюсь распечатать отладочные операторы, когда какой-либо сторонний код изменяет переменную. Например, рассмотрим следующее:
public final class MysteryClass {
private int secretCounter;
public synchronized int getCounter() {
return secretCounter;
}
public synchronized void incrementCounter() {
secretCounter++;
}
}
public class MyClass {
public static void main(String[] args) {
MysteryClass mysteryClass = new MysteryClass();
// add code here to detect calls to incrementCounter and print a debug message
}
У меня нет возможности изменить сторонний MysteryClass, поэтому я подумал, что могу использовать PropertyChangeSupport и PropertyChangeListener для обнаружения изменений в secretCounter:
public class MyClass implements PropertyChangeListener {
private PropertyChangeSupport propertySupport = new PropertyChangeSupport(this);
public MyClass() {
propertySupport.addPropertyChangeListener(this);
}
public void propertyChange(PropertyChangeEvent evt) {
System.out.println("property changing: " + evt.getPropertyName());
}
public static void main(String[] args) {
MysteryClass mysteryClass = new MysteryClass();
// do logic which involves increment and getting the value of MysteryClass
}
}
К сожалению, это не сработало, и у меня нет распечатанных отладочных сообщений. Кто-нибудь видит, что не так с моей реализацией интерфейсов PropertyChangeSupport и Listener? Я хочу напечатать оператор отладки всякий раз, когда вызывается incrementCounter или изменяется значение secretCounter.