2016-07-03 20 views
-2

私は、クラスのすべてのオブジェクトがクラス変数にアクセスできるようにしたいが、クラス外で変更したくない。 たとえば、Array.lengthの方法が使用されます。javaでパブリック変数を定義する方法は変更できません

しかし、この変数を条件付きで変更するメソッドもあります。

基本的に、この使用法はオブジェクト配列の長さが動的に変更できるリサイズオブジェクト配列の実装です。

答えて

1

ここにはいくつかの混乱があるようです。

私は、クラスのすべてのオブジェクトがクラス変数にアクセスできるようにしたいが、クラスの外で変更することは望まない。たとえば、Array.lengthが使用されます。 Javaでの配列の長さは変更できないので、またはクラス外内から変更することはできません -

Array.lengthは(事実上)最後のフィールドです。

しかし、この変数を条件付きで変更するメソッドもあります。

変数がfinalの場合は、配列内のlengthフィールドの値は変更できません。

フィールドからこのレベルの制御を直接取得するわけではありません。その代わりに、標準的なゲッターパターンに従ってください。フィールドをプライベートと非ファイナルにし、値を取得するpublicメソッドを提供して(たとえばgetLength())、そのクラス内で必要に応じて設定します。これにより、必要に応じてクラス内から値を変更できる柔軟性が得られますが、他の場所からでも値を読み取ることができます。

+0

私はゲッターとセッターの使い方を理解しています。しかし、長さが固定されておらず、追加された新しいオブジェクトに基づいて変更できる長さ機能のような配列を実装しようとしています。しかし、新しい方法を宣言することなくこれを達成する方法があるのであれば、私は興味がありました。それが誰にも試されていない、あるいは可能でないなら、私は伝統的な方法に頼ると思います。私は新しい学習者です。 –

+0

@YogeshLuthraあなたは、 '長さが固定されておらず、追加された新しいオブジェクトに基づいて変更できる、長さのような配列の配列です。しかし、これは間違っています - 配列の長さ*は*固定です。 'ArrayList'コレクションクラスの長さは固定ではありませんが(ダイナミックサイズ)、最終的な変数ではなく、ゲッターメソッド(' getSize() ')を使って取得されます。 – berry120

0

Array.lengthfinalとマークされているため、コンストラクタが返された後は変更できません。あなたが何を話しているのか分かりません。

パブリックゲッターとプライベートセッターがあるプライベートフィールドが必要ですか?

private int someField = 0; 

public int getSomeField() { return someField; } 

private void setSomeField(int newValue) { 
    if (someCondition) { 
     someField = newValue; 
    } 
} 
  • someFieldsetSomeField両方がプライベートであるため、このクラスのないコード外側はsomeFieldの値を変更することはできません。
  • 外部コードはsomeFieldの値しか取得できません。
  • クラス内のコードは、setSomeFieldを呼び出してsomeFieldの値を条件付きで設定できます。

要件が満たされています。

0

私が何をしようとしていたかは、ArrayListの実装によって達成できると思います。あなたの返信をありがとう。

関連する問題