Я не думаю, что есть такой способ - компилятор должен знать о классе аргумента, чтобы создать соответствующий байт-код. Если он не может найти класс Foobar, он не может скомпилировать класс Test
.
Обратите внимание, что хотя ваши два класса функционально эквивалентны, поскольку вы на самом деле не используете аргумент, они не идентичны и будут давать разные байт-коды при компиляции.
Так что ваша предпосылка - что компилятору не нужно находить класс для компиляции в этом случае - неверна.
Редактировать - ваш комментарий, похоже, спрашивает: «Может ли компилятор просто пропустить факт и сгенерировать байт-код, который будет уместным в любом случае?»
Ответ - нет, не может. В соответствии со спецификацией языка Java сигнатуры методов должны принимать типы, которые в других местах определены , чтобы быть разрешаемыми во время компиляции.
Это означает, что, хотя механически было бы довольно просто создать компилятор, который бы делал то, что вы просите, он нарушил бы JLS и, таким образом, технически не был бы компилятором Java. Кроме того, обход безопасности при компиляции для меня не очень выгодно ...: -)