本地环境

  • jdk1.8

连接

说明

java的final关键字大家都了解,但是final修饰的如果是引用类型,那么不可修改的其实只是重新赋值,是可以修改引用对象中的属性值的。

那如何来构建一个不可修改的list、map、set等这些对象呢,可以通过jdk自带的Collections,也可以通过google的guava来进行构建。

代码样例

import com.google.common.collect.ImmutableList;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import lombok.extern.slf4j.Slf4j; /**
* <dependency>
* <groupId>org.projectlombok</groupId>
* <artifactId>lombok</artifactId>
* <version>1.18.8</version>
* </dependency>
*
* <dependency>
* <groupId>com.google.guava</groupId>
* <artifactId>guava</artifactId>
* <version>23.0</version>
* </dependency>
*/
@Slf4j
public final class UnModify { // 初始化一个 final 修饰的list
private static final List finalList = new ArrayList();
// 初始化一个由 Collections 构建的list
private static List collectionsList = new ArrayList();
// 初始化一个由 guava 构建的list
private static final List immutableList = ImmutableList.of(1, 2, 3); static {
finalList.add(1);
finalList.add(2);
finalList.add(3); collectionsList.add(1);
collectionsList.add(2);
collectionsList.add(3);
collectionsList = Collections.unmodifiableList(collectionsList);
} public static void main(String[] args){ log.info(finalList.toString());
finalList.set(0, 4);
log.info(finalList.toString()); /*
Exception in thread "main" java.lang.UnsupportedOperationException
at java.util.Collections$UnmodifiableList.set(Collections.java:1311)
*/
log.info(collectionsList.toString());
collectionsList.set(0, 5);
log.info(collectionsList.toString()); /*
Exception in thread "main" java.lang.UnsupportedOperationException
at com.google.common.collect.ImmutableList.set(ImmutableList.java:512)
*/
log.info(immutableList.toString());
immutableList.set(0, 6);
log.info(immutableList.toString()); }
}

java 不可变对象 final Collections guava 简单样例的更多相关文章

  1. java 使用tess4j实现OCR的最简单样例

    网上很多教程没有介绍清楚tessdata的位置,以及怎么配置,并且对中文库的描述也存在问题,这里介绍一个最简单的样例. 1.使用maven,直接引入依赖,确保你的工程JDK是1.8以上 <dep ...

  2. Java 序列化Serializable具体解释(附具体样例)

    Java 序列化Serializable具体解释(附具体样例) 1.什么是序列化和反序列化 Serialization(序列化)是一种将对象以一连串的字节描写叙述的过程:反序列化deserializa ...

  3. extern外部方法使用C#简单样例

    外部方法使用C#简单样例 1.添加引用using System.Runtime.InteropServices; 2.声明和实现的连接[DllImport("kernel32", ...

  4. java 线程、线程池基本应用演示样例代码回想

    java 线程.线程池基本应用演示样例代码回想 package org.rui.thread; /** * 定义任务 * * @author lenovo * */ public class Lift ...

  5. velocity简单样例

    velocity简单样例整体实现须要三个步骤,详细例如以下: 1.创建一个Javaproject 2.导入须要的jar包 3.创建须要的文件 ============================= ...

  6. spring事务详解(二)简单样例

    系列目录 spring事务详解(一)初探事务 spring事务详解(二)简单样例 spring事务详解(三)源码详解 spring事务详解(四)测试验证 spring事务详解(五)总结提高 一.引子 ...

  7. java I/O进程控制,重定向 演示样例代码

    java I/O进程控制,重定向 演示样例代码 package org.rui.io.util; import java.io.*; /** * 标准I/O重定向 */ public class Re ...

  8. 自己定义隐式转换和显式转换c#简单样例

    自己定义隐式转换和显式转换c#简单样例 (出自朱朱家园http://blog.csdn.net/zhgl7688) 样例:对用户user中,usernamefirst name和last name进行 ...

  9. 深入理解java不可变对象(转)

    深入理解Java中的不可变对象 不可变对象想必大部分朋友都不陌生,大家在平时写代码的过程中100%会使用到不可变对象,比如最常见的String对象.包装器对象等,那么到底为何Java语言要这么设计,真 ...

随机推荐

  1. Cookie相关工具方法

    /** * InputStream转化为byte[]数组 * @param input * @return * @throws IOException */ public static byte[] ...

  2. TTTTTTTTTTTTTTTTTT POJ 2724 奶酪消毒机 二分匹配 建图 比较难想

    Purifying Machine Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 5004   Accepted: 1444 ...

  3. pycharm代码无法自动补全

    今天写代码时,突然pycharm代码无法自动补全了,经查找后,解决方案如下: 将python 和 spelling 选中即可 后续:当刚打开pycharm时,出现下面的进度条,代码补全功能完好:但是当 ...

  4. JDK_API剖析之java.io包

    Java的核心库java.io提供了全面的IO接口.包括:文件读写.标准设备输出等.Java中IO是以流为基础进行输入输出的,所有数据被串行化写入输出流,或者从输入流读入. 一.接口 1.Closea ...

  5. linux 下使用命令查看jvm信息

    java程序员除了编写业务代码之外,特别是项目上线之后,更需要关注的是系统的性能表现,这个时候就需要了解一下jvm的性能表现了,可以借助于java虚拟机自带的一些分析工具,主要有三个常用的命令. 1. ...

  6. JAVA使用easyexcel操作Excel

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明.                                               本 ...

  7. pygame的常用模块

    加载图片: pygame.image.load("图片名称") eg:xiaojiejie = pygame.image.load("./data/a/o/l/t/i/p ...

  8. Hibernate与MyBaits的区别?

    (1)Hibernate是全自动,而myBatis是半自动,Hibernate完全可以通过对象关系模型实现对数据库的操作,拥有完整的JavaBean对象与数据库的映射结构来自动生成SQL.而myBat ...

  9. 胜利点20191010-6 alpha week 1/2 Scrum立会报告+燃尽图 04

    此作业要求参见:https://edu.cnblogs.com/campus/nenu/2019fall/homework/8749 一.小组情况组长:贺敬文组员:彭思雨 王志文 位军营 杨萍队名:胜 ...

  10. Is JavaScript a pass-by-reference or pass-by-value language?

    Is JavaScript a pass-by-reference or pass-by-value language? A very detailed explanation about copyi ...