クラスのすべてのインスタンスで表示される定数をクラスに設定したいと思います。
まず、「静的」として宣言する必要があるかどうかわかりません。私が理解している限り、静的フィールドの変更(インスタンスの1つによって行われる)は他のインスタンスによって見られます(したがって、静的変数は特定のインスタンスにバインドされません)。さらに、静的フィールドはインスタンスを使用せずに変更できます(クラスを直接操作します)。したがって、静的フィールドのこれらすべての特別なプロパティは、それを変更する方法と、これらの変更の効果に関連しています。しかし、私の場合は定数が必要です(したがって、「変更」の問題はここでは関係ありません)。したがって、おそらく「静的」を使用する必要はありません。右?
次に、私のセットには多くの要素が含まれているので、セットの値を一度に定義したくありません(変数を作成するとき)。つまり、セットを宣言してから、このセットに要素を段階的に追加したいと思います。しかし、定数を使って作業する場合、それはできません。セットの値を指定して一定にすることはできますか?
第三に、メソッドの外部で変数の値を変更しようとすると、いくつかの問題が発生する可能性があることに気付きました。それで、それはどのように機能しますか?
追加した:
わかった。答えのおかげで、「final」と「static」である必要があることがわかりました(これは定数セットであり、特定のインスタンスに関連付けられないため、クラスのすべてのインスタンスに表示される必要があります)。しかし、私はまだ問題を抱えています。「追加」を使用してセットを指定したかったのですが、定数(最終)の場合はセットに追加できません。さらに、メソッドの外部で変数の値を変更することはできません(なぜですか?)。とにかく、私はセットを定義するために「追加」の使用法を主張しません。すぐに定義する準備ができています。しかし、私はそれを行う方法がわかりません。私はそのようなことを試みました:
final static Set allowedParameters = new HashSet("aaa","bbb");
final static Set allowedParameters = new HashSet(["aaa","bbb"]);
final static Set allowedParameters = new HashSet({"aaa","bbb"});
final static Set allowedParameters = new HashSet(Arrays.asList({"userName"}));
そして、彼らは機能しませんでした。
追加2:
誰かが私に、お願い、Tadeusz Kopecによって与えられたコードを説明できますか?
class YourClass {
private static void fillSet(Set<SomeType> set) {
// here you add elements, like
set.add(new SomeType());
}
private final static Set<SomeType> yourSetField;
static {
final Set<SomeType> tempSet = new HashSet<SomeType>();
fillSet(tempSet);
yourSetField = Collection.unmodifiableSet(tempSet);
}
}
1.fillSet
メソッドには「set」と呼ばれる1つの変数があります。なぜメソッドで使用されないのですか?
2.何がSomeType()
入っていfillSet
ますか?この方法は何をしますか?
3.何をしfillSet
ますか?例の後半で、このメソッドに空のセットを指定します。何のために?
4.何のためにtempSet
最終として宣言しますか?
5.正確には何をunmodifiableSet
しますか?名前からすると、変更できないセットが生成されると思います。しかし、なぜ宣言するのに不十分なyourSetField
のfinal
ですか?それよりも一定だろう。