почему автоимпорт только java.lang пакет?

Я знаю что пакет java.lang автоимпортируется каждой программой Java, которую мы пишем, следовательно все классы в ней автоматически доступны нам.

Мой вопрос состоит в том почему не автоматический импорт java.util и другие пакеты также? То верное сохранит некоторый ввод :)

Поэтому объясните, почему это не сделано.

18
задан Donato Szilagyi 19 January 2013 в 20:08
поделиться

4 ответа

, хорошая причина, причина не для автоматического использования слишком многое, чтобы избежать столкновений пространства имен. Если все в java.util было импортировано автоматически, и тогда вы хотели обратиться к другому классу «карту», ​​например, вам придется обратиться к нему по его полному квалификации.

В ответ на другие ответы в этой теме импорт на самом деле не изменит внутреннее представление файлов классов. На самом деле, вот ссылка для спецификации JVM, описывающая структуру файла класса: см. Это импорт не сохраняется нигде.

32
ответ дан 30 November 2019 в 07:49
поделиться
unsigned int  div3(unsigned int m) {
   unsigned long long n = m;
   n += n << 2;
   n += n << 4;
   n += n << 8;
   n += n << 16;
   return (n+m) >> 32;
}
-121--3428183-

Я думаю, что идея java.lang заключается в том, что все эти классы имеют некоторую связь с языком и средой выполнения, которая является специальной, и не может быть реализована самостоятельно. Примитивные оболочки, безопасность и разрешения виртуальной машины и проверка, загрузка пакетов и классов - все вещи, которые должны быть встроены в систему Java. Всё в java.util, как и коллекции, хотя и невероятно полезно, могло быть реализовано в чистом Java. Некоторые его части (на ум приходят часовые пояса) даже были реализованы сторонними библиотеками еще лучше.

Или, по крайней мере, это было верно еще в Java 1.0 дней. Сегодня, например, Iterator также является неотъемлемой частью языка, так как он автоматически используется для - каждый цикл, верно? Но обратная совместимость всегда была большой вещью с Java, поэтому мы можем жить с этой несогласованностью вечно.

1
ответ дан 30 November 2019 в 07:49
поделиться

Все хорошие IDE воли автоматически разрешают ваш импорт, только подсказывая, когда есть конфликт (два пакета с тем же классом).

3
ответ дан 30 November 2019 в 07:49
поделиться

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

function changeImage() {
    var image = document.getElementById('coin1');
    image.style.display = (image.style.display == 'none') ? 'block' : 'none';
}

setInterval(changeImage, 5000);

Пока затухание прохладно и все, это действительно делает код намного сложнее, когда мы не позволяем использовать внешние библиотеки. В основном, нужно будет иметь дело с дополнительными таймерами, срабатывая с очень короткими интервалами, изменяя непрозрачность целевого элемента на каждом обратном вызове.

Если вы действительно хотите замирать, см. "Руководство Javascript - простая анимация замирания" .

-121--4746520-

Для простых приложений и внутренних помощников я бы использовал статический метод. Для приложений с компонентами мне нравится Managed Extensiability Framework . Вот отрывок из документа, который я пишу, чтобы описать шаблоны, которые вы найдете в моих API.

  • Услуги
    • Определяется интерфейсом службы I [ServiceName] .
    • Экспортировано и импортировано типом интерфейса.
    • Единая реализация обеспечивается серверным приложением и потребляется внутренними и/или внутренними расширениями.
    • Методы на сервисном интерфейсе безопасны для потоков.

В качестве надуманного примера:

public interface ISettingsService
{
    string ReadSetting(string name);

    void WriteSetting(string name, string value);
}

[Export]
public class ObjectRequiringSettings
{
    [Import]
    private ISettingsService SettingsService
    {
        get;
        set;
    }

    private void Foo()
    {
        if (SettingsService.ReadSetting("PerformFooAction") == bool.TrueString)
        {
            // whatever
        }
    }
}
-121--655919-

Поскольку java.lang имеют базовые классы языка Java, а java.util, например, нет.

Но некоторые другие языки, такие как Groovy, автоматически импортируют java.util для вас:)

2
ответ дан 30 November 2019 в 07:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: