Что делает это необходимым?
Принудительные правила компиляции Java делают это необходимым. Java необходимо знать, что находится в домене кода, чтобы проверить соблюдение правил. Домен — это набор файлов jar в вашем пути к классам. Если вы реализуете интерфейс, неабстрактный реализующий класс или неабстрактные дочерние классы, реализующие интерфейс, должны реализовать этот интерфейс. Аннотации переопределения должны быть удовлетворены. Ссылки на другие методы должны быть видны как с точки зрения кода, так и с точки зрения человека. Если метод использует метод другого класса или интерфейса, сигнатура метода должна быть известна вызывающему классу.
Как мне подойти к этому?
Я буду использовать «классификаторы» для обозначения как классов, так и интерфейсов. Вы хотите начать с набора известных проверенных классификаторов и известных непроверенных классификаторов.
Начните с известных непроверенных классификаторов — это все классификаторы в вашем целевом проекте, а известные проверенные классификаторы пусты.
Просмотрите каждый из непроверенных классификаторов и определите любые используемые классификаторы, которые еще не известны, и добавьте их в набор непроверенных классификаторов.
Убедитесь, что текущий непроверенный классификатор находится в пути к классам. Ошибка, если не найдено.
Переместите обработанный классификатор из непроверенного в проверенный.
Повторяйте этот процесс, пока все классификаторы не будут проверены.
Используемые классификаторы включают типы полей, возвращаемые типы методов, типы параметров методов, типы переменных в параметрах, расширенные классы, реализованные интерфейсы, аннотации и, в некоторых случаях, ссылки на Javadoc. В зависимости от правил вашего проекта, при использовании исключительно импорта некоторые вещи могут быть упущены. Интерфейс может быть в том же пакете, но получен из другого проекта.
Почему отражение и Spring-конфигурация должны выходить за рамки?
Такие действия используют текстовые передачи для выполнения кода. Отражение может создавать классы, используя строку «Package.classname», не идентифицируясь как «используемый класс». Эти концепции потребуют дополнительной обработки, выходящей за рамки чистого анализа исходного кода или анализа байт-кода.
Если вы хотите погрузиться глубже, спецификация виртуальной машины Java может дать вам более глубокое понимание того, что необходимо для запуска файла класса. В частности, «4. Формат файла класса» в спецификации Java 10 и «5. Загрузка, связывание и инициализация». https://docs.oracle.com/javase/specs/
person
ProgrammersBlock
schedule
11.07.2018