1. ホーム
  2. java

[解決済み] default-packageのjava-classにアクセスするには?

2022-10-29 14:51:17

質問

私は今、grailsのプロジェクトで他の人と一緒に働いています。私はいくつかのJava-classを書かなければなりません。しかし、私はgroovyで作成された検索可能なオブジェクトにアクセスする必要があります。このオブジェクトはdefault-packageに配置されなければならないようです。

私の質問は 名前付きパッケージのJavaクラスからdefault-packageのこのオブジェクトにアクセスする方法はありますか?

どのように解決するのですか?

を使用することはできません。 クラスを名前付きパッケージからデフォルトパッケージで使用することはできません。

( 技術的には は可能で、Sharique Abdullah の 回答 にあるように、リフレクションAPIを通じて のクラスは無名名前空間から スコープ内にない であり インポート宣言の )

J2SE 1.4以前では、以下のような構文でデフォルトパッケージからクラスをインポートすることができました。

import Unfinished;

それは は使用できなくなりました。 . そのため、パッケージ化されたクラスの中からデフォルトのパッケージクラスにアクセスするには、デフォルトのパッケージクラスをそれ自身のパッケージに移動させる必要があります。

groovyによって生成されたソースにアクセスできる場合、ファイルを専用のパッケージに移動し、その先頭にこの "package" 指示を追加するために、いくつかの後処理が必要です。


2014年に更新しました。 バグ 6975015 は、JDK7 と JDK8 のために、偶数の より厳しい の禁止を記述しています。

TypeName は、クラス型、インタフェース型、enum型、アノテーション型の正規名でなければなりません。

のいずれかのメンバーでなければなりません。 名前付きパッケージ のメンバーであるか、または、辞書的に最も外側を囲む型が 名前付きパッケージ , またはコンパイル時エラーが発生する .


アンドレアス 指摘 コメントで :

<ブロッククオート <ブロッククオート

"そもそもなぜ[デフォルトのパッケージ]があるのか? 設計ミスか?

いいえ、意図的なものです。

JLS 7.4.2. 無名パッケージ は、次のように述べています: "無名パッケージは、主に小規模または一時的なアプリケーションを開発するとき、あるいは開発を始めたばかりのときに便利なように、Java SE プラットフォームによって提供されます。