ちょっとtwitterで話題になったこと。 - 都元ダイスケ IT-PRESS ãèªãã§ãæã£ããã¨ãã¾ã¨ãã¦ã¿ãã
èªåãè¨è¨ãããªãã°ã修飾åãããªãã¦
- ãã¼ã«ã¤ã³ã¿ãã§ã¼ã¹ java.lang.Freezable
- ã¡ã½ãã java.lang.Object#freeze()
- Freezable ã¤ã³ã¿ãã§ã¼ã¹ã implement ãã¦ããªãã¯ã©ã¹ã®ã¤ã³ã¹ã¿ã³ã¹ã§ freeze() ãå¼ã³åºããå ´åã«æããããå®è¡æä¾å¤ã¯ã©ã¹ java.lang.FreezeNotSupportException
- freeze() ãããã¤ã³ã¹ã¿ã³ã¹ã®ãã£ã¼ã«ããå¤æ´ãããã¨ããå ´åã«æããããå®è¡æä¾å¤ã¯ã©ã¹ java.lang.FrozenObjectException
ãç¨æããã¨æãã
package java.lang; public interface Freezable {}
package java.lang; public class FreezeNotSupportedException extends Exception { public FreezeNotSupportedException() { super(); } public FreezeNotSupportedException(String s) { super(s); } }
package java.lang; public class FrozenObjectException extends UnsupportedOperationException { public FrozenObjectException() { super(); } public FrozenObjectException(String s) { super(s); } }
package java.lang; public class Object { : private boolean frozen = false; protected void freeze() throws FreezeNotSupportedException { ... } : }
freeze() ã®å¦çã clone() ã¨åããããªæåã«ããã¨ãããããããã¨æãããã ããå®è£
ããã¨ãªãã¨ãã¡ãã£ã¨ãããããæ°ãããã
freeze() ãå¼ã³åºããå¾ã¯ãã®ã¤ã³ã¹ã¿ã³ã¹ã®ãã£ã¼ã«ãã®å¤æ´ãããããã«ãªã£ãå ´åã«ä¾å¤ãã¹ãã¼ããä»çµã¿ãå¿
è¦ã¯ãªãã ãã©ããããã©ããã£ã¦æ¤åºããã®ãï¼
åºæ¬çã«ã¯ãã¤ãã³ã¼ãå
㧠this ã«å¯¾ãã putfield å½ä»¤ãæã¤ãããªã¡ã½ããã§ããã®åã« frozen? ã®ãã§ãã¯ãå
¥ããã°ããã¨ã¯æããã©ãããã ã¨ç¶æ¿ãã¦ãããã¹ã¦ã®ã¡ã½ããã調ã¹ã¦ãå¿
è¦ãªã¡ã½ãã (setHoge() ã®é¡) ããªã¼ãã¼ã©ã¤ãããªããã°ãããªãã¯ãã
ã ãã©ãä¸ã«ã¯ private ã¡ã½ããã final ã¡ã½ãããããã¯ãã ãããã³ã³ãã¤ã©ãç¹å¥æ±ããã¦å¦çããªãã¨è§£æ±ºã§ããªãã¨æãã
ããã¯ãããã«ãããããªãã ããããããã£ã±ã freeze ã®å®è£
ã¯é£ããããªæ°ãããã
.NET Framework ã«ã¯ Freezable クラス ãããã¿ãããªã®ã ããã©ã®ããã«å®è£ ãã¦ããã®ã ãããï¼