2

標準の Java ライブラリとそのクラスを調べていると、それらのクラスのいくつかに、それらのクラスの原因とはほとんど関係のないメソッドが含まれていることに気付きました。

私が話しているメソッドは、たとえば、いくつかの「システムプロパティ」の値を取得するInteger #getInteger 、または名前によって目的が明確に定義されているSystem#arraycopyです。それでも、これらのメソッドはどちらも場違いに見えます。特に最初のメソッドは、何らかの理由でシステム リソースの操作をプリミティブ型のラッパー クラスにバインドします。

私の現在の観点からすると、このようなメソッド配置ポリシーは、基本的な OOP 設計原則に違反しているように見えます。つまり、各クラスは特定の問題のセットを解決することに専念しなければならず、それ自体をスイス アーミー ナイフに変えてはなりません。しかし、Java 設計者がバカだとは思わないので、これらのメソッドを正しい場所に配置するという決定の背後には何らかの論理があると思います。誰かがそのロジックが実際に何であるかを説明できれば幸いです。

ありがとう!

アップデート

Java には、激動の過去の残骸にすぎない非論理的な要素があるという事実をほのめかした人もいます。次に、私の質問を再定式化します。なぜ Java は、そのアーキテクチャ上の欠陥を非推奨としてマークすることをそれほど嫌うのでしょうか。コードを作成しましたか?

4

3 に答える 3

1

整数の例は、おそらく単なる設計上の決定です。プロパティを整数として暗黙的に解釈したい場合は、java.lang.Integer を使用します。そうしないと、java.lang-Type ごとに getter メソッドを提供する必要があります。何かのようなもの:

  • System.getPropertyAsBoolean(文字列)
  • System.getPropertyAsByte(文字列)
  • System.getPropertyAsInteger(文字列) ...

また、データ型ごとに、デフォルトのメソッドを 1 つ追加する必要があります。 - System.getPropertyAsBoolean(String, boolean) - System.getPropertyAsByte(String, byte) ...

java.lang-Types にはすでにいくつかのキャスト機能 (Integer.valueOf(String)) があるため、ここに getProperty メソッドが見つかってもそれほど驚くことではありません。原則を少し破ることと引き換えに便利です。

System.arraycopy については、オペレーティング システムに依存する操作だと思います。おそらく、非常に効率的な方法でメモリをある場所から別の場所にコピーします。そのような配列をコピーしたい場合は、java.lang.System で探します。

于 2015-03-10T08:44:19.487 に答える
0

「これらのメソッドを適切な場所に配置するという決定の背後には、何らかの論理があると思います。」

それはしばしば真実ですが、何かがおかしいとき、この仮定は通常、誤解を招く場所であることがわかりました.

言語は、誰かが新しい言語を提案した日から、それが時代遅れになる日まで、絶え間なく発展しています。これらの両極端の間に、言語が通過するいくつかの段階があります。特に、誰かがお金をかけて使ってもらいたい場合は、最初のリリースの直前または直後に、非常に独特なフェーズが発生することがよくあります。

昨日動作させるにはこれが必要です」フェーズ。

これは、このようなことが起こる場所です。ほぼ完全な言語がありますが、プログラマーは言語で何ができるかを示すために何かをする必要があります。または、特定のアプリケーションが言語に設計されていない機能を必要とします。

では、この機能をどこに追加しますか? -まあ、「昨日それを機能させる」という仕事をしている特定のプログラマーにとって最も意味のあることです。

ロジックは、関数が他のどこにも属さず、独自のクラスに値しないため、関数が最も理にかなっている場所である可能性があります。次のようなこともできます: これまでのところ、システムを使用せずに配列のコピーを行ったことはありません.. arraycopy をそこに入れ、全員に追加のインクルードを保存しましょう..

  • 言語の次世代では、一部の経験豊富なプログラマーが文句を言うので、人々は機能を動かしません。そのため、機能が重複して、より意味のある場所にある可能性があります。

ずっと後に、誰かがそれをクリーンアップしたい場合は、非推奨としてマークされ、削除されます..

于 2015-03-10T08:44:31.860 に答える