Java - Невозможно импортировать com.package.*(Подстановочный знак)
Это может быть простой проблемой, но Google ничего не вернул.
Я прочитал справку с пакетами в Java - импорт не работает
Я до сих пор не понимаю, почему прямой импорт будет работать, но подстановочный знак не будет. [РЕДАКТИРОВАТЬ] Под пакетом классов я имею в виду пакет классов. Я все еще новичок в Java, поэтому я не знаю семантику [EDIT]
У меня есть пакет класса: com.company.functions
когда я пытаюсь import com.company.*
Я получаю следующую ошибку.
java: package com.company does not exist
Если я импортирую com.company.function
явно то у меня нет проблем.
Так что я полагаю, что у меня есть решение, но ради обучения кто-нибудь может объяснить, почему я вижу эту проблему?
IDE: IntelliJ IDEA 12
import com.sociapathy.*; <--Throws compile error java: package com.sociapathy does not exist
import com.sociapathy.databaseAccess.MySQL; <--Works just fine
2 ответа
Похоже, вы пытаетесь импортировать пакет, который не содержит классов, но содержит только подпакеты.
т.е. у вас есть занятия в com.company.functions
- например com.company.functions.Foo
Но нет занятий непосредственно в com.company
- например com.company.Bar
Несмотря на тот факт, что Java-пакеты кажутся иерархическими, для целей импорта это не так.
Таким образом, вы не можете импортировать com.company.*
потому что он не содержит собственных классов.
Вы можете импортировать com.company.functions.*
потому что он содержит классы
И вы можете импортировать com.company.functions.Foo
потому что это класс.
Теперь вы можете соблазниться создать Bar
класс в com.company
, Это позволит вам импортировать com.company.*
Но поскольку импорт не обрабатывается иерархически, это не приведет к com.company.functions
быть импортированным
Вам все равно нужно явно импортировать com.company.functions.Foo
или подстановочный импорт com.company.functions.*
В Java вы можете импортировать весь пакет:
import package.name.*;
Или вы можете импортировать определенный член пакета
import package.name.class_name;
Не путайте точки в именах пакетов с оператором доступа к элементам - они просто буквальные точки. Вы не можете попытаться импортировать несколько пакетов, разбив их на части.
import package.*; //doesn't work
import packa*; //doesn't work for the same reason