Reflection - это API времени выполнения, и я не думаю, что он может дать вам ошибку во время компиляции. Скорее всего, в вашем коде есть проблема, такая как необъявленный / не импортированный класс или переменная.
Я вижу две возможности.
Если вы пишете свой собственный загрузчик классов или любое другое решение, которое действительно требует динамической загрузки классов во время выполнения, вы не можете смешивать его со ссылками на конкретные классы или интерфейсы, неизвестные (не импортированные) во время компиляции. Вы должны полагаться на отражение от начала до конца или приведение к известным типам (или, более вероятно, интерфейсам, но эти должны быть известными компилятору во время компиляции).
Другая возможность состоит в том, что вы неправильно используете рефлексию или загрузку классов. Я подозреваю, что у вас может быть код, который читает файл .class, затем попробуйте позже использовать этот класс по имени, предполагая, что он работает так, как будто все интерпретировано. Это означало бы, что вы испортили компиляцию и связались с исполнением. Грубо говоря, компилятор переводит только символы, такие как TeacherClass
, в соответствующий код (и поэтому жалуется, что не знает, что такое TeacherClass
). Отражение используется после компиляции, когда вы фактически выполняете код. Вот почему это не влияет на компилятор.
Возможно, вам это вообще не нужно? Может быть, вам просто нужно изучить основы classpath, компиляции и компоновки в Java?
Это всего лишь догадки, основанные на скудной предоставленной информации.