0
 public HashSet<String> Red;
 public HashSet<String> Blue;
 public HashSet<String> Colors;

public Data(HashSet<String> red, HashSet<String> blue, HashSet<String> colors) {
  Red = red;
  Blue = blue;
  Colors = colors;
}

このオブジェクト内に 3 つの Set / HashSet を格納しようとします。これは正しい方法ですか?通常のオブジェクトのように、Set/HashSet オブジェクトにアクセスできますか?

public Set<String> Red = new HashSet<String>();
4

2 に答える 2

1

オブジェクトHashMap内の sにアクセスする方法を尋ねている場合Data

3 つの HashSet のいずれかにアクセスするには、新しい Data オブジェクトを作成し、Data オブジェクトが初期化された後に選択した public フィールドにアクセスします。

HashSet<String> setOne = new HashSet<String>();
HashSet<String> setTwo = new HashSet<String>();
HashSet<String> setThree = new HashSet<String>();

Data d = new Data(setOne, setTwo, setThree);
d.Blue.add("this will be added to setTwo");

ただし、通常は public フィールドを持たずに非公開にして getter/setter メソッドを提供します。これによりカプセル化が提供されます。

インターフェイスまたはクラスのどちらを参照する必要があるかを尋ねている場合

まず、HashSet は具象クラスであり、Set はインターフェースです。 また:参照型は、オブジェクトに対して呼び出すことができるメソッドを決定します。(これは等号の左側で、右側は動的タイプです)。

コンストラクターでは、可能な限り具体的でないようにする必要があります。HashSet クラスの特別な機能を使用していない場合は、 Set インターフェイスを参照することをお勧めします。これは、後で Data クラスの実装を変更する必要がある場合にはるかに柔軟であるためです。クラスのユーザーも可能になります。 HashSet の使用を制限するのではなく、Set を実装するすべてのクラスを使用します。

ただし、特定のクラスの特別な機能が必要な場合は、もちろんそのクラスを参照します。

于 2012-10-31T16:56:20.737 に答える
0

私の理解が正しければ、Set<String> Red = new HashSet<String>()との両方HashSet<String> Red = new HashSet<String>()がフォームとして許可されているかどうか尋ねていますか?

于 2012-10-31T14:20:41.710 に答える