1、安装sourcegraph插件 2、进入到github中,会有这么一个图标(watch左边) 3、点击进去之后 左边是目录结构,右边是代码。还有其他的各种功能,具体可以去看文档。
今天,推荐一种更简洁的写法,使用 SpringBoot Validation 对方法参数进行校验,特别是在编写 Controller 层的方法时,直接使用一个注解即可完成参数校验。...(@RequestBody @Validated Student student) { return student; } }复制代码使用 postman 进行测试,发送一个不带参数的请求...); } }复制代码再次使用 postman 发起测试:控制台打印出自定义的日志信息: 2022-11-23 22:16:37.800 ERROR 19880 --- [nio-8080...@Valid private ClassInfo classInfo; }复制代码再使用 postman 测试一次 分组校验此外还可以使用分组校验,令一组方法对某些字段校验,而令一组方法对其他字段校验...总结在实际开发中,我们可以使用 Spring Boot Validation 提供的注解进行参数校验,提高代码的可读性,避免编写大量的 if-else 代码块和重复的校验语句。
最后在返回之前创建并修改元素 现在让我们把这个方法优化的更简洁,容易开发并且更清晰的展现它的意图。...c: c }; // 但是通过使用简写,我们可以像下面这样 // 这和上边的代码是等价的 const alphabet = { a, b, c }; 简化你的API 好吧,让我们再看一个更常见的例子...最终,它成为了帮我更快速开发并保持更简洁的函数体的JavaScript新特性中的一员。 别急,还没完呢!对象中的属性简写还用于方法定义。...function关键字 const module = { foo: 42, bar: function (value) { // do something } }; // 我们可以直接忽略它而使用一种更简短的写法...属性简写实际上更像是一个美化代码的功能,但我发现使用它之后我的效率更高了而花在编写所有的变量,配置对象以及function关键字上的时间更少了。 你已经开始使用默认参数和属性简写了吗?
session.getMapper(BlogMapper.class); Blog blog = mapper.selectBlog(101); } finally { session.close(); } 可以看出:使用接口...(基于注解),不但可以执行更清晰和类型安全的代码,而且还不用担心易错的字符串字面值以及强制类型转换。...其实可以结合使用,接口中:简单的方法使用注解,复杂的方法使用xml配置。...毕竟,对于简单语句来说,注解使代码显得更加简洁,然而 Java 注解对于稍微复杂的语句就会力不从心并且会显得更加混乱 要求: mapper命名空间org.mybatis.example.BlogMapper...如果对如何通过依赖注入框架来使用 MyBatis 感兴趣可以研究一下 MyBatis-Spring 或 MyBatis-Guice 两个子项目。
问:它被设计为不可变的好处有哪些呢? 答: 节约内存 大家都知道,编程的时候,String 类是大量被使用的(试着用 VisualVm 等工具分析堆,你会发现永远char[] 类型是占用空间最多的。...因为Instant和其他java.time包下的类是不可变的。Date已过时,不应再在新代码中使用。...---- 最后总结一下,防御性编程到底是什么呢? 防御性编程是一种比较泛化的概念,是一种细致、谨慎的编程习惯。 我们在写代码的时候,需要时刻考虑到:代码是否正确? 代码是否正确? 代码是否正确?...例如: 你可以利用不可变特性、构造时拷贝对象等方法来确保一个类的不可变 很多时候,考虑使用防御性拷贝,避免直接在原始实例上进行操作 接收参数时考虑参数的是否非空等 是否引发性能问题、死锁问题 …… 三、...JDK 的实现 JDK 的 Collections 类提供以下不可变集合,用于开发者的一些不可变需求: ? Guava 的实现 同时,Guava亦提供以下不可变集合: ?
基本工具 [Basic utilities] 让使用Java语言变得更舒适 1.1 使用和避免null:null是模棱两可的,会引起令人困惑的错误,有些时候它让人很不舒服。...集合[Collections] Guava对JDK集合的扩展,这是Guava最成熟和为人所知的部分 2.1 不可变集合: 用不变的集合进行防御性编程和性能提升。...缓存[Caches] Guava Cache:本地缓存实现,支持多种缓存过期策略 4. 函数式风格[Functional idioms] Guava的函数式支持可以显著简化代码,但请谨慎使用它 5....并发[Concurrency] 强大而简单的抽象,让编写正确的并发代码更简单 5.1 ListenableFuture:完成后触发回调的Future 5.2 Service框架:抽象可开启和关闭的服务,...原生类型[Primitives] 扩展 JDK 未提供的原生类型(如int、char)操作, 包括某些类型的无符号形式 8. 区间[Ranges] 可比较类型的区间API,包括连续和离散类型 9.
这些高质量的 API 可以使你的JAVa代码更加优雅,更加简洁,让你工作更加轻松愉悦。下面我们就开启优雅Java编程学习之旅!...很多 Guava 的工具类在遇到 null 时会直接拒绝或出错,而不是默默地接受他们。 2. 前提条件:更容易的对你的方法进行前提条件的测试。 3....我们可以更容易使用这些方法。 三. 缓存: 本地缓存,可以很方便的操作缓存对象,并且支持各种缓存失效行为模式。 四....Functional idioms(函数式): 简洁, Guava实现了Java的函数式编程,可以显著简化代码。 五....Concurrency(并发):强大,简单的抽象,让我们更容易实现简单正确的并发性代码。 1.
/** * Guava的不可变集合用法 * * 创建对象的不可变集合是一种很好的防御性编程技巧; * Guava为所有JDK标准集合类型和Guava集合类型都提供了简单易用的不可变版本; *...* 1、不可变集合的优点: * (1)当对象被不可信的库调用时,不可变形式是安全的; * (2)不可变对象被多个线程调用时,不存在竞态条件问题; * (3)不可变集合不需要考虑变化,...因此可以节省时间和空间; * (4)不可变对象因为有固定变化,可以作为常量来安全使用; * 2、JDK提供的unmodifiableXXX方法笨重且累赘、不安全、低效; * 3、不可变集合的三种创建方法...arrayList = new ArrayList(); arrayList.add(1); arrayList.add(2); arrayList.add(3); //需要使用处理后的不可变集合...Collections.unmodifiableList(arrayList); test(arrayList); System.out.println(arrayList); //如果对不可变集合进行操作会报错
扩展集合类 Guava 创造很多 JDK 没有,但是我们日常却明显有用的新集合类型。这些新类型使用 JDK 集合接口规范,所以使用方法与 JDK 集合框架差不多,并没有增加很多使用难度。...a->[1,2,3] b->4,c->[6,5] 使用 Map + List 这种结构比较笨拙,并且代码实现也比较繁琐。Multimap 正式 Guava 中解决这种问题的新出的一个雷。...每次获取元素都将会使用 function 进行转化。...任何对创建之后 List 中的元素进行修改,都不会生效。下次再次读取元素时,将会发现相应修改的丢失了。。。 小黑哥之前就踩过这个坑,如果你有这种需求,可以使用以下方式创建一个新集合: ?...初始创建不可变集合时吗,需要传入数据源,创建完成之后,集合就再也不能修改,增加,删除元素,否则将会报错。 这是一种防御性策略,防止集合在后续操作中被修改,从而引发问题。
概述 不可变集合与对象 Guava 新集合类型 JDK 集合辅助工具类 JDK 基本类型辅助工具类 JDK 字符串辅助工具类 Stopwatch 秒表 ---- Google Guava 概述 1、Guava...项目地址:https://github.com/YunaiV/ruoyi-vue-pro 不可变集合与对象 1、制作对象的不可变副本是一种很好的防御性编程技术,不可变对象有许多优点,包括: 可供不受信任的库安全使用...线程安全:可由多个线程使用,无争用风险。 不需要支持突变,并且可以节省时间和空间,所有不可变的集合实现都比它们的可变同级更节省内存。 可以用作常数,并期望它将保持不变。...Guava 的设计上推荐使用 null 值,大多数情况下,遇到 null 值会抛异常. 3、一个不可变的 ImmutableXxx 集合可以通过以下几种方式创建: 使用 copyOf 方法,如 ImmutableSet.copyOf...4、Guava 为 java jdk 每种标准集合类型提供了简单易用的不可变版本,包括 Guava 自己的集合变体,为 java 提供的不可变版本都是继承 java jdk 的接口而来,所以操作上基本无异
点击关注公众号,Java干货及时送达 Google Guava 概述 1、Guava 是一组来自 Google 的核心 Java 库,包括新的集合类型(如 multimap 和 multiset)、不可变集合...>guava 29.0-jre 不可变集合与对象 1、制作对象的不可变副本是一种很好的防御性编程技术,不可变对象有许多优点...线程安全:可由多个线程使用,无争用风险。 不需要支持突变,并且可以节省时间和空间,所有不可变的集合实现都比它们的可变同级更节省内存。 可以用作常数,并期望它将保持不变。...4、Guava 为 java jdk 每种标准集合类型提供了简单易用的不可变版本,包括 Guava 自己的集合变体,为 java 提供的不可变版本都是继承 java jdk 的接口而来,所以操作上基本无异...Java 创建对象的 6 种方式 阿里为什么推荐使用 LongAdder? 新来一个技术总监:禁止戴耳机写代码。。 重磅!
List 可谓是我们经常使用的集合类之一,几乎所有业务代码都离不开 List。既然天天在用,那就没准就会踩中这几个 List 常见坑。...不可变集合,说好不变,你怎么就变了 为了防止 List 集合被误操作,我们可以使用 Collections#unmodifiableList 生成一个不可变(immutable)集合,进行防御性编程。... unmodifiableList = ImmutableList.copyOf(list); 相比而言 Guava 方式比较清爽,使用也比较简单,推荐使用 Guava 这种方式生成不可变集合...修复的办法有两种: 使用 Iterator#remove 删除元素 ? JDK1.8 List#removeIf ? 推荐使用 JDK1.8 这种方式,简洁明了。...第二 JDK 的提供的不可变集合实际非常笨重,并且低效,还不安全,所以推荐使用 Guava 不可变集合代替。 最后,切记,不要随便在 foreach增加/删除元素。
不可变集合,说好不变,你怎么就变了 为了防止 List 集合被误操作,我们可以使用 Collections#unmodifiableList 生成一个不可变(immutable)集合,进行防御性编程。...但是防过来,却不行,原始 List 随时都有可能被改动,从而影响不可变集合。 可以使用如下两种方式防止上卖弄的情况。 使用 JDK9 List#of 方法。... unmodifiableList = ImmutableList.copyOf(list); 相比而言 Guava 方式比较清爽,使用也比较简单,推荐使用 Guava 这种方式生成不可变集合...修复的办法有两种: 使用 Iterator#remove 删除元素 ? iterator JDK1.8 List#removeIf ? 推荐使用 JDK1.8 这种方式,简洁明了。...第二 JDK 的提供的不可变集合实际非常笨重,并且低效,还不安全,所以推荐使用 Guava 不可变集合代替。 最后,切记,不要随便在 foreach增加/删除元素。
本文全面介绍了 Java Stream API 的概念、功能以及如何在 Java 中有效地使用它进行集合和数据流的处理。...单次使用,数据只能遍历一次,遍历过程中你可以对数据进行过滤、排序、聚合等操作。2....Google Guava - 提供了许多核心Java库没有的集合类型和工具,包括对集合的操作和新的集合类型。...Vavr(之前称为Javaslang)- 提供了不可变的集合类型和其他函数式编程的工具,以提高代码的健壮性。...通过使用Java Stream API,开发者可以写出更简洁、更高效、更易于维护的代码,同时享受到函数式编程带来的好处。
基本工具 [Basic utilities] 让使用Java语言变得更舒适 1.1 使用和避免null:null是模棱两可的,会引起令人困惑的错误,有些时候它让人很不舒服。...集合[Collections] Guava对JDK集合的扩展,这是Guava最成熟和为人所知的部分 2.1 不可变集合: 用不变的集合进行防御性编程和性能提升。...缓存[Caches] Guava Cache:本地缓存实现,支持多种缓存过期策略 4. 函数式风格[Functional idioms] Guava的函数式支持可以显著简化代码,但请谨慎使用它 5....并发[Concurrency] 强大而简单的抽象,让编写正确的并发代码更简单 5.1 ListenableFuture:完成后触发回调的Future 5.2 Service框架:抽象可开启和关闭的服务,...基于容量的回收: 规定缓存项的数目不超过固定值,只需使用CacheBuilder.maximumSize(long)。缓存将尝试回收最近没有使用或总体上很少使用的缓存项。
guava的优点: 高效设计良好的API,被Google的开发者设计,实现和使用 遵循高效的java语法实践 使代码更刻度,简洁,简单 节约时间,资源,提高生产力 Guava工程包含了若干被Google...("Java"))); System.out.println(fitered); // [Guava, Java] //自定义过滤条件 使用自定义回调方法对Map的每个Value进行操作 ImmutableMap...,各种条件判断,各种 $%#$@# 而现在我们只需要使用好guava的api 就能使代码变得简洁,并且不用担心因为写错逻辑而背锅了 File file = new File("test.txt"); List...文件url Files类中还有许多方法可以用,可以多多翻阅 11.guava缓存 guava的缓存设计的比较巧妙,可以很精巧的使用。...以上只是guava使用的一小部分,guava是个大的工具类,第一版guava是2010年发布的,每一版的更新和迭代都是一种创新。 jdk的升级很多都是借鉴guava里面的思想来进行的。
高效设计良好的API,被Google的开发者设计,实现和使用 遵循高效的java语法实践 使代码更刻度,简洁,简单 节约时间,资源,提高生产力 Guava工程包含了若干被Google的 Java项目广泛依赖...2.所有不可变集合会比可变集合更有效的利用资源。...,各种条件判断,各种%#@# 而现在我们只需要使用好guava的api 就能使代码变得简洁,并且不用担心因为写错逻辑而背锅了 1 2 3...11.guava缓存 guava的缓存设计的比较巧妙,可以很精巧的使用。...---- 以上只是guava使用的一小部分,guava是个大的工具类,第一版guava是2010年发布的,每一版的更新和迭代都是一种创新。 jdk的升级很多都是借鉴guava里面的思想来进行的。
在本文的剩余部分,我们将介绍三种避免共享可变状态问题的方法: 通过复制数据避免共享 通过无损更新来避免数据变动 通过使数据不可变来防止数据变动 针对每一种方法,我们都会回到刚才看到的示例并进行修复。...更简洁的 `deepCopy()` 版本 如果我们使用 .map() 和 Object.fromEntries(),可以使以前的 deepCopy() 实现更加简洁: 1function deepCopy...在修改它之前,我们需要通过复制(必要的深度)来“取消共享”。 防御性复制是一种在问题可能出现时始终进行复制的技术。...如果数据是不可变的,则可以共享数据而没有任何风险。特别是无需防御性复制。 非破坏性更新是对不变数据的补充,使其与可变数据一样通用,但没有相关风险。...也就是说,不涉及特殊的数据结构。
然后,我们使用Files.asCharSink将处理后的内容写回文件。这种方式既利用了Guava的简洁性,也利用了Java 8流操作的强大功能。...下面是一个使用Guava库中Files工具类的Java代码示例。展示如何使用Files工具类来创建临时文件、写入数据、读取数据、复制文件以及删除文件。...这种自动关闭机制可以大大减少因忘记关闭资源而导致的错误和性能问题。 当然,下面是一个使用Guava库中Closer的Java代码示例。...e.printStackTrace(); } } // 更简洁的写法是使用try-with-resources...然而,更推荐的做法是使用try-with-resources语句,这样可以更简洁地管理资源,并且无需显式调用closer.close()。
这些防御性编程环境通常的构造方法有:添加声明到代码中,执行按契约进行设计,开发软件防御防火墙,或者简单添加用来验证用户输入的代码。 ...测试工作不是防御性的,这项工作可以验证代码现在是正确的,但不能保证代码在经历将来的修改之后不会出错。即便是拥有了世界上最好的测试工具,也还是会有人对代码进行更改,并使代码进入过去未测试的状态。...运行环境没有为程序提供足够的服务;外部程序库运行失误,不遵从你所依赖的接口协议; 4、编码的目标是清晰,不只是简洁 简单就是一种美,不要让你的代码过于复杂。...避免由于这些隐患而受到攻击其实很简单:不要编写这样的糟糕代码!使用更安全的、不允许破坏程序的数据结构——使用类似C++的string类的托管缓冲。或者 对不安全的数据类型系统地使用安全的操作。...通过把strcpy更换为有大小限制的字符串复制操作strncpy,就可以使上面的C代码段得到保护。
领取专属 10元无门槛券
手把手带您无忧上云