package org.oklab; import java.util.Collections; import java.util.Arrays; import java.util.List; /** * @author satoshiokita * */ public class StaticFinal2 { /** * static final修飾子で、変更が出来ない配列オブジェクトを定義しているつもりだが、 * 実際には、ポインタなので配列の中身を変更できてしまう。 */ private static final Object[] objArray = { new Integer(1), new Integer(2) }; public static final List OBJ_LIST = Collections.unmodifiableList(Arrays.asList(objArray)); public static void main(String[] args) { StaticFinal2 sf = new StaticFinal2(); for (int i = 0; i < StaticFinal2.objArray.length; i++) { System.out.println(objArray[i].toString()); } /* * 中身のオブジェクトは変更できてしまうのを * java.util.Collections#unmodifiableListで防ぐ * この例では、UnsupportedOperationExceptionが発生する */ for (int i = 0; i < StaticFinal2.OBJ_LIST.size(); i++) { try { OBJ_LIST.add(new Integer(1)); } catch (UnsupportedOperationException ex) { ex.printStackTrace(); return; } } } }