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

95
задан Viorel Florian 28 October 2016 в 16:28
поделиться

3 ответа

Вы использование can’t классы в пакете по умолчанию от именованного пакета.
( Технически Вы можете, как показано в Sharique Abdullah ответ через API Reflection, , но классы от пространства имен без имени не в объеме в объявление импорта )

До J2SE 1.4 Вы могли импортировать классы из пакета по умолчанию с помощью синтаксиса как это:

import Unfinished;

Это , больше не позволял . Таким образом для доступа к классу пакета по умолчанию из упакованного класса требует перемещения класса пакета по умолчанию в собственный пакет.

, Если у Вас есть доступ к источнику, сгенерированному отличным, некоторая последующая обработка необходима, чтобы переместить файл в специализированный пакет и добавить эту директиву "пакета" в ее начале.

<час>

Обновление 2014: ошибка 6975015 , для JDK7 и JDK8, описывают даже более строгий запрет на импорт от пакета без имени.

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

<час>

Andreas указывает в комментариях :

, "почему [пакет по умолчанию] там во-первых? ошибка дизайна?"

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

123
ответ дан VonC 24 November 2019 в 05:49
поделиться

На самом деле Вы можете.

Используя отражения API можно получить доступ к любому классу до сих пор. По крайней мере, я смог :)

Class fooClass = Class.forName("FooBar");
Method fooMethod = fooClass.getMethod("fooMethod", String.class);

String fooReturned = (String)fooMethod.invoke(fooClass.newInstance(), "I did it");
60
ответ дан Holger 24 November 2019 в 05:49
поделиться

Можно использовать пакеты в эти Groovy код, и вещи будут работать просто великолепно.

Это может означать незначительную перестройку кода под grails-app и что-то вроде боли сначала, но на большом проекте чаш Грааля, просто имеет смысл организовывать вещи в пакетах. Мы используем соглашение о присвоении имен com.foo.<app>.<package>.

пакета стандарта Java, Имеющее все в пакете по умолчанию, становится помехой для интеграции, поскольку Вы находите.

Контроллеры, кажется, тот артефакт Grails (или артефакт), который сопротивляется быть помещенным в пакет Java. Вероятно, я просто еще не выяснил Convention для этого.;-)

3
ответ дан Ken Gentle 24 November 2019 в 05:49
поделиться
Другие вопросы по тегам:

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