Какой синтаксис для импорта класса в пакет по умолчанию в Java?

Возможный дубликат: Как получить доступ к java-классам в пакете по умолчанию?


Можно ли импортировать класс в Java, который находится в пакете по умолчанию? Если да, то какой синтаксис? Например, если у вас есть

package foo.bar;

public class SomeClass {
    // ...

в одном файле, вы можете написать

package baz.fonz;

import foo.bar.SomeClass;

public class AnotherClass {
    SomeClass sc = new SomeClass();
    // ...

в другом файле. Но что, если SomeClass.java не содержит объявление пакета? Как вы относитесь к SomeClass в AnotherClass?

Ответ 1

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

Из Спецификация языка Java:

Это компиляция чтобы импортировать тип из безымянный пакет.

Ответ 2

Единственный способ доступа к классам в пакете по умолчанию - из другого класса в пакете по умолчанию. В этом случае, не утруждайте себя import, просто обратитесь к нему напрямую.

Ответ 3

Это невозможно.

Альтернативой является использование отражения:

 Class.forName("SomeClass").getMethod("someMethod").invoke(null);

Ответ 4

Это не ошибка компиляции! Вы можете импортировать пакет по умолчанию только в класс пакета по умолчанию.

Если вы сделаете это для другого пакета, то это будет ошибка компиляции.

Ответ 5

Как говорили другие, это плохая практика, но если у вас нет выбора, потому что вам нужно интегрироваться с сторонней библиотекой, использующей пакет по умолчанию, тогда вы можете создать свой собственный класс в пакете по умолчанию и таким образом получить доступ к другому классу. Классы в пакете по умолчанию в основном используют одно пространство имен, поэтому вы можете получить доступ к другому классу, даже если он находится в отдельном файле JAR. Просто убедитесь, что файл JAR находится в пути к классам.

Этот трюк не работает, если ваш класс не находится в пакете по умолчанию.