2016-09-05 4 views
0

Javaプログラマとしての私の練習では、sun.reflect.Reflectionsun.misc.Unsafeなどのクラスで提供されるメソッドが、呼び出し元に敏感なコードを書く機能などの非常に便利なものがあることがわかりました。ただし、sun.reflectとそれに関連するパッケージをアプリケーションコードで使用することは、パブリックAPIではないため、強くお勧めします。この機能がJava標準ライブラリに追加されない理由は何ですか? Java API開発者が、これらのメソッドの潜在的なリスクを考慮し、その使用が合理的であるかどうかを意識して判断するプログラマの能力を信用できないという印象を受けることがあります。sun.reflect.Reflectionなどのクラスが公開APIでないのはなぜですか?

注:私の質問はではありません。では「Sunの独自のJavaクラスを使用するのは悪い習慣ですか?問題は、なぜこれらのクラスを使用すべきではないかということです。私の質問は、APIに追加されていない理由です。これは「使用するのがよい」ということです。

+2

[Sun独自のJavaクラスを使用するのは悪い習慣ですか?](http://stackoverflow.com/questions/1834826/it-is-a-bad-practice-to-use-suns-proprietary-java-クラス) – Pshemo

答えて

0

開発者を信頼しないだけでなく、プライベートAPIは自由に変更することができます。なぜなら、あなたと私のような開発者は、明確な方法で動作するコードに依存しないためです。 Javaは下位互換性という強力なコンセプトを持っているため、パブリックAPIは壊れない方法で変更されることはありませんが、JDKで作業している人は既存のシステムを壊すことを心配することなくプライベートAPIを変更して拡張できます。これにより、1.5でプログラムを書いたからといって、バージョン1.5をインストールしておくのではなく、本番システムのJavaバージョンを比較的安全に更新することができます。

+0

確かに、なぜこれらのクラスは十分に文書化された、バックワードと互換性のあるパブリックAPIに追加できないのだろうか。 – Beethoven

+0

時には(反射は結局ありますが)、開発者にとって強力なツールを提供する場合、JDK開発者が安定したAPIを提供することは難しくなります。 'Unsafe.park()'では、標準APIよりもあなたのアプリケーションのデッドロックを簡単に行うことができます。 – Kayaman

関連する問題