Почему интеллигентная идея говорит, что функция не используется - PullRequest
1 голос
/ 28 сентября 2019

Этот код:

public class Main {
    public static void main(String[] args) {
        My<H> m = new My<>(new H());
        m.get();
    }
}

interface iface {
    void run();
}
class H implements iface {
    @Override
    public void run() {
        System.out.println("ok");
    }
}

class My<F extends H & iface> {
    private F o;
    My(F o) {
        this.o = o;
    }
    void get() {
        o.run();
    }
}

В версии 2019.2 программы Idea Intelligence я получаю лампочку с уведомлением о том, что функция запуска не используется в интерфейсе iface.Как решить эту проблему?

1 Ответ

1 голос
/ 28 сентября 2019

IntelliJ говорит это, потому что ничто не сломалось бы, даже если run были удалены.Единственный раз, когда вы вызываете run, это o.run(), но o определенно является подклассом H (в соответствии с общим ограничением), поэтому он определенно имеет объявленный метод run, независимо от того, объявлен ли ifacerun метод или нет.

Чтобы удалить это предупреждение, нужно установить общее ограничение F extends iface.

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