《Java工程师必读手册》——Java编程技巧系列——Java编程技巧之样板代码(5)

简介: 《Java工程师必读手册》——Java编程技巧系列——Java编程技巧之样板代码(5)

接上篇:https://developer.aliyun.com/article/1228115?spm=a2c6h.13148508.setting.33.21084f0eNCKPti


五、 定义集合常量

 

在编码中,经常使用到各种集合常量,比如List列表常量、Set集合常量、Map映射常量等。

 

1. 普通定义方式

 

1) 定义代码

 

最简单的方法,就是直接定义一个普通的集合常量。

 

image.png

 

2) 使用代码

 

使用也很方便,直接通过“类名.常量名”使用。

 

image.png 

 

2. 存在主要问题

 

通过SonarLint插件扫描,会出现以下问题:

 

image.png 

 

由于普通的集合对象(如ArrayList、HashMap、HashSet等)都是可变集合对象,即便是定义为静态常量,也可以通过操作方法进行修改。所以,上面方法定义的集合常量,并不是真正意义上的集合常量。其中,Arrays.asList方法生成的内部ArrayList不能执行add/remove/clear方法,但是可以执行方法,也属于可变集合对象。

 

image.png 

 

3. 最佳定义方式

 

在JDK中,Collections工具类中提供一套方法,用于把可变集合对象变为不可变(不可修改,修改时会抛出UnsupportedOperationException异常)集合对象。所以,可以利用这套方法定义集合静态常量。

 

image.png


六、 定义数组常量

 

上一章介绍了如何定义集合常量,这一章就来介绍一下如何定义数组常量。

 

 

 

1. 定义公有数组常量

 

1) 定义代码

 

一般人定义数组常量,就会像下面代码一样,定义一个公有数组常量。

 

image.png 

 

2) 使用代码

 

使用也很方便,直接通过“类名.常量名”使用。

 

image.png 

 

3) 存在问题

 

但是,可以通过下标修改数组值,导致数组常量的值可变。所以,这种方法定义的数组常量,并不是一个真正意义上的数组常量。

 

image.png 

 

2. 定义公有集合常量

 

1) 定义代码

 

可以通过上一章定义集合常量的方法,返回一个公有集合常量。

 

image.png 

 

2) 使用代码

 

要想得到数组常量,就把集合常量转化为数组常量。

 

image.png

 

3) 存在问题

 

每一次都会把集合常量转化为数组常量,导致程序运行效率降低。

 

3. 最佳定义方式

 

最佳法“私有数组常量+公有克隆方法”的解决方案。如下代码所示:先定义一个私有数组常量,保证不会被外部类使用;在定义一个获取数组常量方法,并返回一个数组常量的克隆值。

 

1) 定义代码

 

这里,提供一个“私有数组常量+公有克隆方法”的解决方案。如下代码所示:先定义一个私有数组常量,保证不会被外部类使用;在定义一个获取数组常量方法,并返回一个数组常量的克隆值。

 

image.png 

 

2) 使用代码

 

由于每次返回的是一个克隆数组,即便修改了克隆数组的常量值,也不会导致原始数组常量值的修改。

 

image.png


 接下篇:https://developer.aliyun.com/article/1228113?groupCode=java

 

相关文章
|
4月前
|
Java 开发工具
【Azure Storage Account】Java Code访问Storage Account File Share的上传和下载代码示例
本文介绍如何使用Java通过azure-storage-file-share SDK实现Azure文件共享的上传下载。包含依赖引入、客户端创建及完整示例代码,助你快速集成Azure File Share功能。
411 5
|
5月前
|
IDE Java 关系型数据库
Java 初学者学习路线(含代码示例)
本教程为Java初学者设计,涵盖基础语法、面向对象、集合、异常处理、文件操作、多线程、JDBC、Servlet及MyBatis等内容,每阶段配核心代码示例,强调动手实践,助你循序渐进掌握Java编程。
642 3
|
4月前
|
Java 数据处理 API
为什么你的Java代码应该多用Stream?从循环到声明式的思维转变
为什么你的Java代码应该多用Stream?从循环到声明式的思维转变
299 115
|
4月前
|
安全 Java 编译器
为什么你的Java代码需要泛型?类型安全的艺术
为什么你的Java代码需要泛型?类型安全的艺术
214 98
|
4月前
|
安全 Java 容器
告别繁琐判空:Optional让你的Java代码更优雅
告别繁琐判空:Optional让你的Java代码更优雅
|
4月前
|
安全 Java 容器
告别空指针噩梦:Optional让Java代码更优雅
告别空指针噩梦:Optional让Java代码更优雅
430 94
|
4月前
|
Java 编译器 API
java最新版和java8的区别,用代码展示
java最新版和java8的区别,用代码展示
365 43
|
8月前
|
Java 数据库连接 API
2025 更新必看:Java 编程基础入门级超级完整版指南
本教程为2025更新版Java编程基础入门指南,涵盖开发环境搭建(SDKMAN!管理JDK、VS Code配置)、Java 17+新特性(文本块、Switch表达式增强、Record类)、面向对象编程(接口默认方法、抽象类与模板方法)、集合框架深度应用(Stream API高级操作、并发集合)、模式匹配与密封类等。还包括学生成绩管理系统实战项目,涉及Maven构建、Lombok简化代码、JDBC数据库操作及JavaFX界面开发。同时提供JUnit测试、日志框架使用技巧及进阶学习资源推荐,助你掌握Java核心技术并迈向高级开发。
828 5
|
监控 安全 Java
Java中的多线程编程:从入门到实践####
本文将深入浅出地探讨Java多线程编程的核心概念、应用场景及实践技巧。不同于传统的摘要形式,本文将以一个简短的代码示例作为开篇,直接展示多线程的魅力,随后再详细解析其背后的原理与实现方式,旨在帮助读者快速理解并掌握Java多线程编程的基本技能。 ```java // 简单的多线程示例:创建两个线程,分别打印不同的消息 public class SimpleMultithreading { public static void main(String[] args) { Thread thread1 = new Thread(() -> System.out.prin
|
安全 Java 调度
Java中的多线程编程入门
【10月更文挑战第29天】在Java的世界中,多线程就像是一场精心编排的交响乐。每个线程都是乐团中的一个乐手,他们各自演奏着自己的部分,却又和谐地共同完成整场演出。本文将带你走进Java多线程的世界,让你从零基础到能够编写基本的多线程程序。
157 1