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
Другие вопросы по тегам