2012-03-04 10 views
5

単純な質問ですが、配列内のlengthがカプセル化されていないのはなぜですか?私はgetLength()メソッドを実装するのが簡単だと思うので、これはプログラミングの初心者向けですか?配列内の長さ

+0

関連:http://stackoverflow.com/q/9297899/697449 –

+1

投票に再開してください。 IMO、これはリンクされた質問の複製ではありません。この質問は、Javaデザイナーが** 'length'フィールドを**カプセル化しなかった理由です。 (リンクされた質問は、配列と文字列のAPIの一貫性についてのもので、これは大きく異なる問題です。) –

+2

さらに、(IMO)と**面白い**質問で、答える価値があります。 –

答えて

1

私は前提を持っていますが、これがJavaのデザイナーがそのようにした理由です。

配列は、固定長のコンテナ(もちろんObject)です。そして、非常に基本的なものなので、この場合のカプセル化は素晴らしく重要ではありません。例えばArrayListを見てみましょう。これは配列のカプセル化と見なすことができます。

基本配列には、それをカプセル化する他の型よりも多くの利点があります。 Javaの最初のバージョンがリリースされたとき、今日の最適化のほとんどが欠けていました。したがって、配列の単純さ(パフォーマンスの点で)を持つデータ構造を持つことは良いことです。

/また彼らがその時点でそのことについて考えていませんでしほど単純なことができ、その後、彼らはとにかく後方互換性:)

を維持しなければならなかった、あなたはそれについての興味深いものを発見した場合(多分あなたは日を電子メールで送信できオラクル)投稿してください! これは素晴らしい質問です。

0

配列はオブジェクトとして解釈されるかもしれませんが、実際には他のオブジェクトや変数を含むメモリアドレスの固定セットです。このように、彼らは、など.length、必ずしもそうとは限らないメソッドを属性を持つ配列に関する多くの情報はここで見つけることができます.getLength()

のように:実装するのは簡単だろう http://docs.oracle.com/javase/tutorial/java/nutsandbolts/arrays.html

+1

'[要出典]' – delnan

+1

この説明は水を保持しません。実際、配列は暗黙的なスーパークラスとして 'Object'を持っています。したがって、メソッドの束があります。その結果、Javaのデザイナー*はすべての配列に対して 'length()'メソッドを定義することができました。 (アプリケーションプログラムがメソッドを追加できないという事実はここでは関係ありません) –

0

、それが理由です実装されていません。

アレイは実際の制御を持たない単純なストレージブロックです。高度なコントロールが不要な場合に、簡単で迅速な保存方法が可能です。

リスト、キュー、リンクされたリスト、二重リンクされたリストなどのようなものを使用することができます。必要な場合は、サイズを記録できます。明らかに、使用している言語によっては、自分で作成する必要があります。

配列の長さを持ち、単純な配列を使いたい場合は、何かを追加するたびにcount変数に1を加え、何かを削除するたびに-1を追加することができます。これは、getLength()メソッドと同じ機能を実行します。

+3

何?長さ*は保存されています。ゲッターメソッドで公開されるのではなく、publicメンバーを介して公開されます。 – delnan