Java中定数Map、定数List
4122 ワード
Javaで宣言された定数はfinalキーワードで修飾されますが、finalは基本データ型にのみ有効です.たとえば、次のようにします.
定数のListまたはMapが必要で,単純にfinalを用いて修飾すると,集合の内容の追加と修正には役に立たない.次のコードは、私たちの目的である「集合コンテンツの定量化」を達成することはできません.
具体的な理由はJavaのメモリアドレスストレージを研究することに興味があります.以下では、問題を解決するための方法を直接示します.
もちろんリストにはもう一つの方法があります.
最後に、上記のコードのfinalは、Map、Listコンテンツの修正に実際の役割を果たすことはできませんが、Stringのようなタイプと同様に、mapへの直接的な付与を禁止することができます.final修飾後,我々の集合を初期化した後,直接オブジェクト付与を行い,
public static final String content = " ";
public static final int num = 1;
定数のListまたはMapが必要で,単純にfinalを用いて修飾すると,集合の内容の追加と修正には役に立たない.次のコードは、私たちの目的である「集合コンテンツの定量化」を達成することはできません.
public static final Map myMap = new HashMap() {
private static final long serialVersionUID = 1L;
{
put("1", "11");
put("2", "22");
}
};
public static final List myList = new ArrayList() {
private static final long serialVersionUID = 1L;
{
add("a");
add("b");
}
};
具体的な理由はJavaのメモリアドレスストレージを研究することに興味があります.以下では、問題を解決するための方法を直接示します.
public static final Map myMap = Collections.unmodifiableMap(new HashMap() {
private static final long serialVersionUID = 1L;
{
put("1", "11");
put("2", "22");
}
});
public static final List myList = Collections.unmodifiableList(new ArrayList() {
private static final long serialVersionUID = 1L;
{
add("a");
add("b");
}
});
もちろんリストにはもう一つの方法があります.
public static final List myList1 = new ArrayList(Arrays.asList("Tom", "Jerry", "Mike"));
最後に、上記のコードのfinalは、Map、Listコンテンツの修正に実際の役割を果たすことはできませんが、Stringのようなタイプと同様に、mapへの直接的な付与を禁止することができます.final修飾後,我々の集合を初期化した後,直接オブジェクト付与を行い,
myMap = new HashMap();
のようにコンパイルできない.したがって,目的を達成するためには,オブジェクトが「直接付与」によって修正されることを禁止するとともに,集合内容の変更も禁止する.