Вы должны дать своему классу свое имя (не Class1
), чтобы ваше намерение стало ясным. Возможно, вы хотите иметь счетчик ?:
package so3274211;
import java.util.List;
import java.util.concurrent.CopyOnWriteArrayList;
public class Counter {
private int value = 0;
private final List<Listener> listeners = new CopyOnWriteArrayList<Listener>();
private void fireAfterValueChanged() {
for (Listener listener : listeners) {
listener.afterValueChanged(this);
}
}
public int getValue() {
return value;
}
public void increment() {
value++;
fireAfterValueChanged();
}
public void addListener(Listener listener) {
listeners.add(listener);
}
public void removeListener(Listener listener) {
listeners.remove(listener);
}
public interface Listener {
void afterValueChanged(Counter counter);
}
}
В обычном Java-коде вы не можете напрямую прослушивать переменную. Но если вы поместите эту переменную в простой объект с правильными методами модификации (increase()
в этом случае), вы можете вызвать слушателей из этого метода.
Чтобы позвонить слушателю, вам необходимо как-то зарегистрировать его. Обычно это выполняется с помощью простого List<Listener>
, а интерфейс к нему состоит из двух методов: addListener(Listener)
и removeListener(Listener)
. Этот шаблон можно найти повсюду в AWT и Swing.
я определил интерфейс Listener
внутри Counter
класса, так как этот интерфейс не имеет большого значения вне этого класса, и я не хочу называть его CounterListener
. Таким образом, появляется меньше файлов .java
.
Используя этот счетчик в реальной программе может выглядеть следующим образом:
package so3274211;
public class Main {
public static void main(String[] args) {
Counter c = new Counter();
c.increment();
c.addListener(new Counter.Listener() {
@Override
public void afterValueChanged(Counter counter) {
System.out.println(counter.getValue());
}
});
c.increment();
}
}
Я первым создал счетчик, а затем добавил слушателя к нему. Выражение new Counter.Listener() { ... }
- это определение анонимного класса, которое также часто появляется в программировании на Java GUI.
Итак, если вы серьезно относитесь к программированию с использованием графического интерфейса, вам необходимо изучить эти концепции и методы внедрения (инкапсуляция переменной в класс, добавление кода слушателя, определение слушателя, вызов слушателя из кода, который изменяет переменную) в любом случае ,
Мои процессы до сих пор требовали статической обработки. Я определил 200 статических переменных и 15 статических классов, которые есть только один экземпляр. Несколько экземпляров будут забивать вещи. В принципе, это приложение для последовательной связи. Я ценю помощь. –
@ Adam Outler Я написал программное обеспечение для последовательной связи без этого множества статических переменных. Похоже, вы просто пишете процедурный код, это будет сложно, когда ваша программа станет большой. Принципы OO - отличный способ инкапсулировать и скрывать информацию из других частей программы. –
Скорее всего, вы снова и снова работали с одной и той же информацией. Мое приложение собирает данные, которые используются для работы нескольких систем. RPM, время, температуры, скорости потока, уровни насыщения, каждая из которых является отдельной статической переменной, и важна только самая последняя информация. –