Why final is not applied for Map ?
Prabhat Ranjan Ranch Hand
Joined: Oct 04, 2006 Posts: 374 |
posted 2010年11月16日 GMT+8下午8:00:19
|
Hi,
Map hm= new HashMap(); hm.put("hash","test");
ok
final Map hm= new HashMap(); hm.put("hash","test");// this should not allow here as Map i have declared as final.
ko
but Map hms = Collections.unmodifiable(hm) is working fine. |
|
Matthew Brown Bartender
Joined: Apr 06, 2010 Posts: 4115
|
posted 2010年11月16日 GMT+8下午8:02:20
|
Prabhat Ranjan wrote:final Map hm= new HashMap(); hm.put("hash","test");// this should not allow here as Map i have declared as final.
But hm is still pointing at the same object. final means that the reference can't be altered, not the object itself. |
|
Paul Sturrock Bartender
Joined: Apr 14, 2004 Posts: 10336
|
posted 2010年11月16日 GMT+8下午8:09:12
|
hm.put("hash","test");// this should not allow here as Map i have declared as final. [
Final does not imply unmodifiable, unless the object is immutable. If you want an unmodifiable map have a look at the Collections class, or alternatively wrap the map in your own custom immutable class. |
如果要实现HashMap不可被修改,即如果不可变类的成员变量是可变的(譬如HashMap),我们需要使用深拷贝(deep copy)或者克隆来防止成员变量被更改:
private
final
HashMap testMap;
……
……
……
/**
* 可变对象的访问方法
*/
public
HashMap getTestMap() {
return
(HashMap) testMap.clone();
}
分享到:
相关推荐
在Java编程语言中,`final`关键字扮演着至关重要的角色,它用于声明不可变的变量、方法和类。理解并熟练运用`final`关键字对于编写稳定、高效且易于维护的代码至关重要。 首先,`final`关键字用于声明变量。当一个...
3. **数组与集合**: 数组是固定大小的数据容器,集合则更为灵活,包括ArrayList、LinkedList、HashSet、HashMap等多种类型,它们各自有不同的特性和应用场景。 4. **异常处理**: Java中的try-catch-finally语句块...
在Java编程语言中,`final`关键字是一个非常重要的概念,它具有多种用途,涉及到类、方法和变量的声明。在本篇文章中,我们将深入探讨`final`关键字在Java中的使用和意义。 首先,`final`关键字用于声明一个不可变...
final关键字特性 Java类和包 抽象类和接口 代码块和代码执行顺序 Java自动拆箱装箱里隐藏的秘密 Java中的Class类和Object类 Java异常 解读Java中的回调 反射 泛型 枚举类 Java注解和最佳实践 JavaIO流 多线程 深入...
Java中的final关键字可以修饰变量、方法和类。当final关键字修饰变量时,表示该变量的值不能被改变;当final关键字修饰方法时,表示该方法不能被重写;当final关键字修饰类时,表示该类不能被继承。 Java面向对象 ...
本资源摘要信息涵盖了 JAVA 基础知识领域的多个方面,包括抽象类、同步、集合、线程、Map 集合、文件输入/输出、接口、final 关键字、继承、构造方法、异常类、break 语句等。 1. 抽象类:抽象类是 JAVA 中的一种...
3. **检查关键字**:遍历每行中的单词,将其与Java关键字列表比较,如果匹配则计数。 4. **存储和显示结果**:将每个关键字及其出现次数存储在一个映射结构(如HashMap)中,并在程序结束时输出结果。 此外,由于...
虽然HashMap不是线程安全的,但在单线程环境下使用或配合同步机制(如`synchronized`关键字或`Collections.synchronizedMap()`)可以保证安全性。 以下是一个简单的示例,展示了如何用HashMap实现枚举功能: ```...
7. final关键字和static关键字的使用:final关键字可以用来声明变量、方法和类,表示不可变、最终状态或封闭的含义。static关键字用于创建类变量和类方法,它表示相关成员属于类,而非类的实例。 8. 基本数据类型与...
3. final 关键字的作用:final 关键字用于修饰变量、方法和类,表示它们不能被修改或继承。 4. String、StringBuffer、StringBuilder 的区别:String 是不可变字符串,StringBuffer 和 StringBuilder 是可变字符串,...
* Java 中 final 关键字的作用是什么?java 中的反射机制是什么? * Java 如何高效进行数组拷贝?成员变量和方法的区别是什么? Java Web * Cookie 和 Session 的关系和区别是什么?HTTP 连接池实现原理是什么? ...
- final关键字:常量和不可变对象 - static关键字:静态变量和静态方法 - this关键字:引用当前对象 - 构造器的重载 - 包装类:将原始类型转换为对象 5. **第五章(ch5):集合框架** - 集合接口:List、Set...
#### 一、Final关键字的理解与应用 1. **final关键字的基本用法:** - `final`关键字在Java中主要用于声明不可变性,它可以修饰类、方法以及变量。 - 一旦一个变量被声明为`final`,那么它的值就不能再被改变。 ...
2. final关键字:在Java中,final关键字用于声明属性、方法和类不能被改变,它可以提高性能,因为final变量在编译时就能被确定下来。例如,“finaljava.lang.StringStringfinallength()”表明String类的length()方法...
5. static与final关键字:static表示静态,它与类相关联,不依赖于类的任何特定对象。final关键字用于声明常量、属性和方法,表示一旦赋值后不可更改。 6. Java集合框架:包括List、Set、Map等接口以及实现这些接口...
Java SE编程入门教程涵盖了广泛的Java基础知识,包括集合框架、垃圾回收、instanceof操作符、I/O流、Math类、Object类、static final关键字、this和super关键字、常用API、GUI编程、包装器、反射机制、泛型、封装...
4. final在Java中的作用:final关键字可以修饰变量、方法和类,表示它们不可修改或继承。 5. java中的Math.round(-1.5)等于多少?:-1,因为Math.round方法将数字四舍五入到最接近的整数。 6. String属于基础数据...
2. 类与对象:封装、继承、多态,类的构造器,访问修饰符(public、private、protected、默认),final关键字,this和super关键字。 3. 异常处理:异常分类(检查型和非检查型异常),try-catch-finally语句,throws...
根据提供的文件信息,我们可以从中提炼出与Java相关的多个知识点,具体包括异常处理、类与对象的概念、线程管理、错误与异常的区别、final关键字的使用、堆栈的区别、自定义数据结构、图形系统的设计、匿名内部类的...
- 静态与final关键字:掌握静态成员和常量的使用。 - 泛型:学习如何使用泛型提高代码的类型安全性和重用性。 4. **Java集合**(7. 尚硅谷_佟刚_Java基础_Java集合.pdf): - 集合框架:介绍ArrayList, ...