2017-06-04 11 views
2

私はライブラリを設計していますが、クライアントにアクセスさせたいクラスをpublicにするだけでよいということはわかっていますが、このベストプラクティスに固執しています。私が理解していることから、これはベストプラクティスです。私はinternalという名前のパッケージを私のライブラリのパッケージの1つに入れて、私がパッケージプライベートにしようとしているクラスを保持することにしましたが、最終的にはpublicとなるかもしれません。私のライブラリに「内部」パッケージを含めるのは悪い習慣ですか?

Javaで動作するパッケージには、「親パッケージプライベート」のクラスを作成できないため、実際には「悪い習慣」があります。

答えて

3

Java 9を待つと、ものがクリアされます。新しい モジュール構造では、公開されている クラスをモジュール外のどこにも制限することができます。

しかし、それまではアクセスは実際には強制できないことに注意してください。リフレクションを適切に使用することで、プライベートなものまでアクセスすることができます(Java 9のモジュールはリフレクションを通じてアクセスを許可しません)。

アクセス修飾子は、単に「私に頼らないで、変更するかもしれない」ユーザーへのメモです。アクセス修飾子が使用できない場合は、別の方法でそのメモを付けることができます。 JDKでも完全にアクセス可能なsuncom.sunパッケージがありますが、コードをビルドしないでください。

よく使われるAPIを見ると、パッケージ名がinternalとなっているので、大丈夫です。IMHO。

+1

「適切なリフレクションを使用すると、何にでもアクセスできます」 - SecurityManagerがない場合に限ります。信頼できないコードは「何か」にアクセスできません。あなたが書いたコードや実行することを決めた信頼できるコードは、もちろん何でもできます。 –

+0

@ErwinBolwidtこれらのクラスを使用しないことを潜在的なクライアントに知らせるにはどうすればよいですか?どういうわけかそれらをマークするか、単に「内部」のままにしておくべきですか? @ deprecated?私の方法のどれも静的なものが本当にそれを使うことができないのであれば、これは必要ではないかもしれないと思います – defoification

関連する問題