2012-01-05 5 views
2

先日、私はjava.security.BasicPermission APIを見ていました。なぜそれは私的な方法を持っていますか?なぜJavaパブリックAPIにプライベートメソッドがあるのですか?

private void readObject(ObjectInputStream s) ストリームからBasicPermissionの状態を復元するためにreadObjectが呼び出されます。

申し訳ありませんが、私は何を聞いたのか分かりませんでした。このクラスは単なる例です。 Javaライブラリには多くのものがあります。それらのすべてが読み込まれます|オブジェクトメソッドを書き込みます。彼らがこのAPIを設計したとき、なぜアプリケーションが使用できないプライベートメソッドを追加するのでしょうか?

+0

答えを見るとわかるように、一般的な私的方法の考え方に精通しているのかどうかは分かりませんが、この特定のものが存在する理由、最初はプライベートメソッドの目的を理解していません。 –

答えて

1

このメソッドはおそらく他のパブリックメソッドの1つによって内部的に呼び出され、APIユーザーの関心事ではないはずです。

+0

私は、この場合パブリックメソッドによって呼び出されたのではないかと疑います。シリアル化のための特殊なケースです。 –

+0

私はBasicPermission.javaを調べました。両方のプライベートメソッドはクラス内で使用されません。 – user1132732

+0

そして、ジョン・スケートは正しい(再び)。 – Tudor

2

readObjectは、デシリアライズ時にJavaシリアル化フレームワークで使用され、カスタム操作をサポートします。ほとんどのプライベートメソッドとは異なり、通常はクラス自体の中でと呼ばれることはなく、フレームワーク/ JVMによって呼び出されます。これは明らかに通常の期待に多少なりとも違反します。

詳細については、docs for Serializableを参照してください。

+0

彼の質問は、実際のクラスそのものよりも私的/公共アクセサーに関するものだと思います。 – Arindam

+1

@Arindam:あなたはそれをどう思いますか?彼は、「実装の中で私的メソッドが呼び出される」という通常の状況にはまったく限定されない非常に具体的な例を与えられています - それは、まったく重要でないその異常な状況を選ぶ* 。 –

+0

意味がある、私は質問を間違えたと思う。 – Arindam

0

プライベートメソッドは、APIによってアクセスできないメソッドですが、内部的に何かを行うために使用されます。

たとえば、マイクロ波のような実世界の例を考えてみましょう。それは、bake()、heat()などの外部ユーザー入力を持ちますが、cookFor(Time minutes、Temperature t)のような私的な内部関数を持ちます。

だから今、電子レンジの実装は本当に簡単で、

public void bake() { 
    cookFor(45, 300); 
} 

public void heat() { 
    cookFor(5, 100); 
} 

など、我々が機能を持っている理由は、優れた手続きプログラムを書くことで、プライベート/パブリック・ディスクリプタは、クラスをカプセル化するために使用されます。

関連する問題