我是靠谱客的博主 忧虑小蘑菇,最近开发中收集的这篇文章主要介绍慎重使用final数组,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

[b]具有公有地静态final数组域几乎总是错误的。[/b]比如:
[code]
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";
[/code]
我每个解决方案用[code][/code]框起怎么显示不错代码编辑器的效果???????

最后

以上就是忧虑小蘑菇为你收集整理的慎重使用final数组的全部内容,希望文章能够帮你解决慎重使用final数组所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(44)

评论列表共有 0 条评论

立即
投稿
返回
顶部