0

Javaのパッケージ内から、指定されたパッケージ内にないファイルにアクセスする方法を検索してみましたが、答えが見つかりませんでした。誰かが方法を知っていますか?

4

3 に答える 3

1

名前付きパッケージからデフォルト (名前なし) パッケージの CLASS にアクセスしたい場合は、アクセスできません。JLS は次のように述べています。

「名前のないパッケージ (§7.4.2) の型には正規名がないため、あらゆる種類のインポート宣言での正規名の要件は、(a) 名前のないパッケージの型をインポートできないこと、および (b) 静的であることを意味します。名前のないパッケージ内の型のメンバーはインポートできません. そのため、§7.5.1、§7.5.2、§7.5.3、および §7.5.4 はすべて、型をインポートしようとするとコンパイル時エラーが必要です (またはその静的メンバー) を名前のないパッケージに入れます。"

つまり、単一タイプのインポートは使用できません。また、パッケージに名前を付けることができないため、「ワイルドカード」インポートは機能しません。

はい、リフレクションを使用してこの制限を回避できますが、これは非常に面倒であり、コードが遅く壊れやすくなります。Java でのリフレクションについて学びたい場合は、ここから始めてください - http://docs.oracle.com/javase/tutorial/reflect/index.html。しかし、それはこの「問題」の良い解決策ではありませんか。

正しい解決策は、パッケージを使用することです... Java 言語の設計者が意図したとおりです。JLS は次のように述べています。

「名前のないパッケージは、主に小規模または一時的なアプリケーションを開発するとき、または開発を開始するときに便利なように、Java SE プラットフォームによって提供されます。」

/名前のないパッケージは小さな/一時的なアプリ (または一時的なアプリ) にのみ使用し、深刻な場合は名前付きパッケージの使用に移行する必要があることを意味します。


名前のないパッケージ内の FILE (リソースなど) にアクセスしたい場合は、リソース名の前にスラッシュを付けるだけです。例えば

      InputStream is = classLoader.getResourceAsStream("/someresource");
于 2012-12-30T00:43:51.750 に答える
0

あなたは反省なしではできません。

'デフォルトパッケージ'(パッケージなし)の使用は実際には推奨されていません。これは、それを推奨しないために存在するものの1つです。

于 2012-12-30T00:19:03.157 に答える
0

「デフォルト」パッケージは、実際にはルート ディレクトリです。絶対パスを使用:

URL url = getClass().getResource("/myphoto.jpg");
InputStream in = getClass().getResourceAsStream("/myphoto.jpg");

作成したjarを7zip/WinZipなどで開きます。ルート ディレクトリにファイルが表示されます。

于 2012-12-30T00:36:12.300 に答える