Java中常量Map、常量List

简介: 版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/catoop/article/details/68927742 Java 中声明常...
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/catoop/article/details/68927742

Java 中声明常量我们一般使用 final 关键字来修饰,但是 final 一般只对基本数据类型有效,比如:

public static final String content = "你好";
public static final int num = 1;

如果我们需要一个常量的List或者Map,单纯的使用 final 来修饰,对添加和修改集合的内容就没有作用了。下面的代码并不能达到我们的目的“集合内容常量化”。

    public static final Map<String, String> myMap = new HashMap<String, String>() {
        private static final long serialVersionUID = 1L;

        {
            put("1", "11");
            put("2", "22");
        }
    };

    public static final List<String> myList = new ArrayList<String>() {
        private static final long serialVersionUID = 1L;

        {
            add("a");
            add("b");
        }
    };

具体原因有兴趣的可以去研究Java的内存地址存储,下面直接给出可以解决问题达到目的方法:

    public static final Map<String, String> myMap = Collections.unmodifiableMap(new HashMap<String, String>() {
        private static final long serialVersionUID = 1L;

        {
            put("1", "11");
            put("2", "22");
        }
    });

    public static final List<String> myList = Collections.unmodifiableList(new ArrayList<String>() {
        private static final long serialVersionUID = 1L;

        {
            add("a");
            add("b");
        }
    });

当然List 还有另外一种方法:

public static final List<String> myList1 = new ArrayList<String>(Arrays.asList("Tom", "Jerry", "Mike"));

最后多说一句,上面代码中的 final 虽然并不能对 Map、List 内容的修改起到实际作用,但是和String这种类型一样,可以禁止直接对map赋值。
被final修饰后,当我们的集合初始化以后,再进行直接对象赋值,像 myMap = new HashMap<String, String>(); 这样,是无法通过编译的。
所以为达目的,我们既要禁止对象通过“直接赋值”的方式来修改,也要禁止集合内容的变更。

目录
相关文章
|
27天前
|
Java
java8中List对象转另一个List对象
java8中List对象转另一个List对象
37 0
|
23小时前
|
Java API
List转Map(id为key,list为value)
List转Map(id为key,list为value)
8 0
|
1天前
|
存储 安全 Java
[Java基础面试题] Map 接口相关
[Java基础面试题] Map 接口相关
|
2天前
|
存储 Java 测试技术
一文搞清楚Java中的方法、常量、变量、参数
在JVM的运转中,承载的是数据,而数据的一种变现形式就是“量”,量分为:**常量与变量**,我们在数学和物理学中已经接触过变量的概念了,在Java中的变量就是在程序运行过程中可以改变其值的量。
13 0
|
14天前
|
存储 算法 安全
Java Map:键值对的奇妙之旅
Java Map:键值对的奇妙之旅
42 0
Java Map:键值对的奇妙之旅
|
24天前
|
Java
Java使用List去重的四中方式
Java使用List去重的四中方式
19 6
|
28天前
Cause: java.sql.SQLIntegrityConstraintViolationException: Column ‘id‘ in field list is ambiguous
Cause: java.sql.SQLIntegrityConstraintViolationException: Column ‘id‘ in field list is ambiguous
18 0
|
1月前
|
Java
JAVA——List中剔除空元素(null)的三种方法汇总
JAVA——List中剔除空元素(null)的三种方法汇总
如何使用Stream流将List转换为Map
如何使用Stream流将List转换为Map
|
1月前
|
Java 程序员
Java的运算符常量
Java的运算符常量
11 0