2010-10-14 4 views
2

Я делаю язык JVM. Этот язык имеет модули (пространства имен) и возможность импорта java-библиотек. В разделе импорта пользователь может импортировать такие вещи, как «java.io. » или «java.concurrent.» и т. Д. Как узнать, что ссылка «Файл» в источнике находится в пакете java.io, а не где-нибудь еще?Как разрешить класс/поле в компиляторе JVM?

+0

Я с нетерпением жду обсуждения об этом. –

ответ

1

Поскольку Java статически типизирован, поиск должен быть однозначным. При импорте целых пакетов (или пространств имен) вашему компилятору необходимо будет обрабатывать конфликты имен в этих пространствах имен, если типы используются в источнике. Поэтому вам нужно будет просмотреть список доступных типов для проверки.

Вот почему вы иногда видите исходный код с полным расширением класса. например java.util.Date при импорте java.util и java.sql В противном случае компилятор не знает, какой из них использовать.

У Scala есть интересные функции по импорту из пакетов Java. Вы можете посмотреть на них для вдохновения.

+0

«Итак, вам нужно будет просмотреть список доступных типов для проверки». это именно то, что я хочу знать, как сканировать доступные типы? Я не знаю никаких Package.scan() в java. Спасибо за ссылку scala, я посмотрю – islon

0

Если вы хотите знать, какие классы находятся в пакете, вам необходимо указать все файлы классов в каталоге этого пакета в пути к классу.

Смежные вопросы