浏览 3457 次
锁定老帖子 主题:慎重使用final数组
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2007-02-13
public static final String[] CODES={ "A","B", "C", "D", "E}; 初看这段代码有什么感想?因为CODES定义的是static final,"final"在java中定义为"不可变"(我想在其它语言中也是这样定义的),值得注意的是它只是说明指向该对象的指针不变,对于常量对象来说这点是成立的,但对于数组来说就不成立啦!因为上面只能保证CODES对象不变(意思是说final只能保证基本数据类型或原始数据类型不可变,比如:String,Double),但CODES引用的对象是可以改变的。 解决方案1:定义一个私有数组,以及编写一个公有的非可变列表: private static final String[] CODES ={ "A","B", "C", "D", "E"}; public static final List VALUES= Collections.unmodifiableList(Arrays.asList(CODES)); 解决方案2:要求在编译时(compile-time)类型检查,这样也就损失了性能 private static final String[] CODES = { "A","B", "C", "D", "E"}; public static final codes() { return (CODES[])CODES.clone(); } 解决方案3:死马当做活马医 public static final String CODES_A = "A"; public static final String CODES_B = "B"; public static final String CODES_C = "C"; public static final String CODES_D = "D"; public static final String CODES_E = "E"; 我每个解决方案用框起怎么显示不错代码编辑器的效果??????? 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |