5

だから、私は何年も C# で働いていて、今は Java で働いています。C# では、internal キーワードを使用してクラス/メソッドをパブリック ビューから非表示にできますが、明示的に許可した場合は特定のアセンブリ/パッケージにアクセスを許可できます。Java を見回しても、内部とまったく同じものは見当たりません。

package-privateについて知りました。ただし、これにより、外界から完全に隠されます。Java で、公開せずに特定の他のパッケージが内部コードにアクセスできるようにする方法はありますか?

なぜ私がこれを行うのかと尋ねると、一般的にユニット/統合テスト、または特定の信頼できるパッケージがコードにアクセスして複製しないようにする必要があります。プライベート/内部コードをテストするべきではないと考える人がいることは知っています。また、内部アクセスを許可することは、一般的に優れたソフトウェア エンジニアリングではないことも知っています。これらのトピックについての議論にはあまり興味がありません。私がやりたいことをやってくれるかどうか知りたいだけです。

ありがとう。

4

2 に答える 2

4

Java には、.NET のようなアセンブリの概念がありません (少なくともまだ)。最も近いのは、この概念 (x-internal、x-friend など) を持つ OSGi バンドルですが、それは実際にはコア Java ではありません。

OSGi を使用していない場合は、この複雑な手順を実行する必要はありません。単体テストがテスト対象のクラスと同じパッケージにあることを確認してください。src/main/javaMaven ディレクトリ構造 (Maven を使用していない場合でも適切な選択です) は、src/test/javaなどでこれを設定します。

于 2015-07-21T22:46:41.817 に答える
1

別の場所にある同じパッケージ名にテストを配置できます。これは同じパッケージとして扱われ、パッケージのプライベート クラスにアクセスできます。testSomething.jarテスト クラスは、テスト対象のパッケージが一部である場合のように、別の JAR ファイルに配置できますsomething.jar

これは、密封されたパッケージでは機能しません。

于 2015-07-21T22:42:25.697 に答える