Несовместимые типы - найдено: int required: boolean on timer.schedule run () curInterval - PullRequest
0 голосов
/ 22 июня 2019

Пожалуйста, исправьте несовместимый тип. Int int boolean on timer.schedule run () curInterval, Что не так с моим кодом?

 public class HeartbeatPacket implements HeartbeatStop {
        private final String TAG = getClass().getSimpleName();
        private int curInterval = 0;
        private HeartbeatStop heartbeatStop = null;
        private final int setInterval;
        private Timer timer;

        public HeartbeatPacket(HeartbeatStop heartbeatStop, int setInterval) {
            this.heartbeatStop = heartbeatStop;
            this.curInterval = setInterval;
            this.setInterval = this.curInterval;
        }

        public void callStopFun() {
            if (this.heartbeatStop != null) {
                this.heartbeatStop.callStopFun();
            }
        }

        public void recover() {
            synchronized (this) {
                this.curInterval = this.setInterval;
            }
        }

        private void run() {
            if (this.timer == null) {
                Log.e(this.TAG, "null == timer");
            } else {
                this.timer.schedule(new TimerTask() {
                    public void run() {
                        synchronized (this) {
    //this is the problem section
                            if (HeartbeatPacket.this.curInterval = HeartbeatPacket.this.curInterval - 1 < 0) {
                                HeartbeatPacket.this.callStopFun();
                                HeartbeatPacket.this.recover();
                                HeartbeatPacket.this.stop();
                            }
                        }
                    }
                }, 0, 1000);
            }
        }

        public void start() {
            recover();
            this.timer = new Timer();
            run();
        }

        public void stop() {
            this.timer.cancel();
            this.timer = null;
        }``
    }

Я думаю, что компилятор Java должен был жаловаться на if (HeartbeatPacket).this.curInterval = HeartbeatPacket.this.curInterval - 1 <0).Вы случайно не видели сообщение об ошибке компиляции? </p>

1 Ответ

0 голосов
/ 22 июня 2019

Порядок приоритета оператора не тот, который вы думаете, особенно с = и <.Сначала выполняется сравнение, в результате получается тип boolean, который затем присваивается полю int, что недопустимо.

В общем случае не рекомендуется объединять присваивание и / илимодификация переменной в условиях if.Это трудно читать и подвержено ошибкам (как видно здесь).Измените свое значение перед if, а затем сравните с простым значением.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...