Почему #import Foundation.h широко распространен в Objective-C, а отдельные операции импорта типичны для Java - PullRequest
0 голосов
/ 28 марта 2012

Из того, что я видел, разработка Android требует традиционного импорта в стиле Java каждого отдельного класса / интерфейса, в то время как предлагаемые шаблоны в XCode импортируют такие файлы, как Foundation и UIKit. Какая разница в компиляторе между Obj-C и Java, которая делает такой большой импорт в одном порядке, а в другом - нет?

Чтобы было ясно, я не жалуюсь, что это не доступно в Java, мне просто любопытно, почему было бы плохо делать что-то вроде импорта java.util.* или создания какого-либо файла с суперзаголовком, который импортирует много вещей .

1 Ответ

2 голосов
/ 28 марта 2012

Следует отметить одну важную вещь: единственный исходный код , необходимый для компиляции любого данного класса Java, - это исходный код этого класса.

Все остальное должно быть доступно в скомпилированном видетолько форма (то есть как .class файлы).Это означает, что один файл .java всегда является синтаксически замкнутой единицей, которой не требуется другой исходный код для интерпретации компилятором.

Это совсем не то, как языки в стиле Cобрабатывать внешние зависимости: им нужны определения типов и функций (а также макросы и некоторые вещи, о которых я, вероятно, забыл прямо сейчас), чтобы иметь возможность правильно анализировать и компилировать файл .c (конечно, некоторые .c файлы могут быть синтаксически закрыты, но это не обычный случай).

Самое близкое, что вы можете получить, включив огромный файл .h в Java, использует импорт .* для импорта всех классовданный пакет: import foo.bar.*, но это все еще далеко от C / C ++ / Objective-C.

И на отдельном примечании: import foo.*, вероятно, немного менее распространен в Java, чем отдельные операции импортапо одной простой причине: индивидуальный импорт гораздо более явный и дает понять, какие классы используются и , они обычно пишутся вашим IВ любом случае, DE предпочтительнее, поэтому этот выбор даже не затрудняет написание кода Java.

...