`

慎重使用final数组

    博客分类:
  • java
阅读更多
具有公有地静态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";

我每个解决方案用
框起怎么显示不错代码编辑器的效果???????

  


  
分享到:
评论

相关推荐

    Static和Final修饰类属性变量及初始化

    1.static修饰一个属性字段,那么这个属性字段将成为类本身的资源,public修饰为共有的,可以在类的外部通过test.a来访问此属性;在类内部任何地方可以使用.如果被修饰为private私有,那么只能在类内部使用.

    final关键字的使用

    final的使用简单简绍,更容易的理解final关键字的使用

    Final_Cut_Pro使用手册.pdf

    Final_Cut_Pro使用手册.pdf

    学习Java,你需要知道这些——Java数组

    目录数组的概念数组的创建数组的引用数组的创建数组元素的初始化数组的使用使用数组数组的复制多维数组 数组的概念 数组由同一类型的对象或者基本数据组成,并封装在同一一个标识符(数组名称)下。 数组是对象 动态...

    Java基于final修饰数据过程解析

    主要介绍了Java基于final修饰数据过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

    国内所有的城市名称,一个字符串数组

    国内所有的城市名称,一个字符串数组例如 public static final String[] mCitiesStrings = { "A", "阿拉善盟", "鞍山", "安庆", "安阳", "阿坝", "安顺", "阿里", "安康", "阿克苏", "阿勒泰" ,"澳门" ,"安吉" ,...

    final关键字的使用.mp4

    final关键字的使用f

    react-final-form-arrays:渲染和编辑数组的组件:chequered_flag:React Final Form

    :money_bag: :chequered_flag: React最终形式的数组安装npm install --save react-final-form-arrays react-final-form final-form final-form-arrays 或者yarn add react-final-form-arrays react-final-form ...

    hibernate jar包:hibernate-commons-annotations-4.0.1.Final.jar等

    Hibernate.jar包,Hibernate可以应用在任何使用JDBC的场合,包含 hibernate-commons-annotations-4.0.1.Final.jar hibernate-core-4.1.12.Final.jar hibernate-ehcache-4.1.12.Final.jar hibernate-entitymanager-...

    jboss-threads-3.1.0.Final-API文档-中文版.zip

    赠送jar包:jboss-threads-3.1.0.Final.jar; 赠送原API文档:jboss-threads-3.1.0.Final-javadoc.jar; 赠送源代码:jboss-threads-3.1.0.Final-sources.jar; 赠送Maven依赖信息文件:jboss-threads-3.1.0.Final....

    jboss-logging-3.4.1.Final-API文档-中文版.zip

    赠送jar包:jboss-logging-3.4.1.Final.jar; 赠送原API文档:jboss-logging-3.4.1.Final-javadoc.jar; 赠送源代码:jboss-logging-3.4.1.Final-sources.jar; 赠送Maven依赖信息文件:jboss-logging-3.4.1.Final....

    Final IK 2.2 - Unity

    Final IK 2.2 - Unity

    validation-api-2.0.1.Final-API文档-中文版.zip

    赠送jar包:validation-api-2.0.1.Final.jar; 赠送原API文档:validation-api-2.0.1.Final-javadoc.jar; 赠送源代码:validation-api-2.0.1.Final-sources.jar; 赠送Maven依赖信息文件:validation-api-2.0.1....

    final类的适应实例

    Java中final类的简单使用,并对Java关键字的使用做出了总结

    Final Cut Studio 2.0

    Final Cut Studio 2.0 容量大小为50多G! Final Cut Studio 2让你超越纯粹的剪辑。你将发现特别为 Final Cut Pro 用户设计的新创意工具的强大力量。从剪辑快速过度到动画制作、音频编辑及混音、颜色分级以及作品交付...

    undertow-websockets-jsr-2.1.7.Final-API文档-中文版.zip

    赠送jar包:undertow-websockets-jsr-2.1.7.Final.jar; 赠送原API文档:undertow-websockets-jsr-2.1.7.Final-javadoc.jar; 赠送源代码:undertow-websockets-jsr-2.1.7.Final-sources.jar; 赠送Maven依赖信息...

    netty-3.10.5.Final-API文档-中文版.zip

    赠送jar包:netty-3.10.5.Final.jar; 赠送原API文档:netty-3.10.5.Final-javadoc.jar; 赠送源代码:netty-3.10.5.Final-sources.jar; 赠送Maven依赖信息文件:netty-3.10.5.Final.pom; 包含翻译后的API文档:...

    FinalData、FinalData

    FinalData是一个免费的带有中文界面的数据恢复软件,主要用于恢复误删除的文件。FinalData软件体积小,可以快捷、有效地恢复误删除的文件,FinalData提供了绿色版和安装版,绿色版可以放在U盘上使用。

    [Java][Final]测试例子

    Java编程思想第四版140页是这么描述的,“对应基本类型,final使数值恒定不变,对应对象引用,final使引用恒定不变。 * 一旦引用被初始化指向一个对象,就无法再把他改为指向另一个对象。然而对象其自身却是可以被...

    USB 3 0 Final USB 3 0 Final USB 3 0 Final

    USB 3 0 Final USB 3 0 Final USB 3 0 Final

Global site tag (gtag.js) - Google Analytics