具有公有地静态final数组域几乎总是错误的。比如:
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";
我每个解决方案用
框起怎么显示不错代码编辑器的效果???????
分享到:
- 2007-02-13 14:00
- 浏览 3818
- 评论(0)
- 论坛回复 / 浏览 (0 / 3460)
- 查看更多
相关推荐
当然,我们可以使用Arrays.toList方法,但是如果没有慎重思考随便使用几乎肯定会产生令人讨厌的意外。考虑完下面这段程序并预测其输出你明白我的意思了: package com.wordpress.mlangc.arrays; import java.util....
#### 八、慎重使用增强型的For循环语句 尽管增强型for循环(foreach)提供了更简洁的语法,但它可能会导致性能下降,尤其是在处理大量数据时。因此,在需要高性能的场景下,建议使用传统的for循环。 #### 九、避免...
因为每次使用String连接都会创建新的String对象,而StringBuilder和StringBuffer在内部是以数组的方式存储字符串,仅在必要时才进行数组扩容操作,从而减少垃圾回收的次数。 3. 局部变量的使用 尽可能地使用局部...
在循环和高频调用的方法中,优先考虑使用基本数据类型或数组,以实现对象的最大化复用。 #### 4. 使用final修饰符 final修饰符可以防止类被继承,同时使方法具备内联的潜力,从而提高执行速度。在不影响程序功能的...
- 使用基本数据类型或数组替代对象,尤其是在循环中。 - 对于需要频繁创建的对象,可以考虑使用对象池技术来管理。 #### 4. 尽量使用final修饰符 使用`final`关键字声明的类不能被继承,方法不能被重写。这有助于...
6. **回收**:确保finalize()方法正确调用super.finalize(),避免在不必要的情况下显示调用finalize(),在主要类型转为String时避免使用临时变量,对于Date数组的使用要慎重。 7. **Javadoc注释**:正确使用Javadoc...