首页 > 编程语言 >Java 缺失的特性:扩展方法

Java 缺失的特性:扩展方法

时间:2023-04-03 12:02:59浏览次数:31  
标签:Manifold String List 扩展 manifold Java 方法 缺失

作者:周密(之叶)

什么是扩展方法

扩展方法,就是能够向现有类型直接“添加”方法,而无需创建新的派生类型、重新编译或以其他方式修改现有类型。调用扩展方法的时候,与调用在类型中实际定义的方法相比没有明显的差异。

为什么需要扩展方法

考虑要实现这样的功能:从 Redis 取出包含多个商品ID的字符串后(每个商品ID使用英文逗号分隔),先对商品ID进行去重(并能够维持元素的顺序),最后再使用英文逗号将各个商品ID进行连接。

// "123,456,123,789"
String str = redisService.get(someKey)

传统写法:

String itemIdStrs = String.join(",", new LinkedHashSet<>(Arrays.asList(str.split(","))));

使用 Stream 写法:

String itemIdStrs = Arrays.stream(str.split(",")).distinct().collect(Collectors.joining(","));

假设在 Java 中能实现扩展方法,并且我们为数组添加了扩展方法 toList(将数组变为 List),为 List 添加了扩展方法 toSet(将 List 变为 LinkedHashSet),为 Collection 添加了扩展方法 join(将集合中元素的字符串形式使用给定的连接符进行连接),那我们将可以这样写代码:

String itemIdStrs = str.split(",").toList().toSet().join(",");

相信此刻你已经有了为什么需要扩展方法的答案:

  • 可以对现有的类库,进行直接增强,而不是使用工具类
  • 相比使用工具类,使用类型本身的方法写代码更流畅更舒适
  • 代码更容易阅读,因为是链式调用,而不是用静态方法套娃

在 Java 中怎么实现扩展方法

我们先来问问最近大火的 ChatGPT:

1.png

好吧,ChatGPT 认为 Java 里面的扩展方法就是通过工具类提供的静态方法

标签:Manifold,String,List,扩展,manifold,Java,方法,缺失
From: https://www.cnblogs.com/alisystemsoftware/p/17282675.html

相关文章

  • Java 缺失的特性:扩展方法
    作者:周密(之叶)什么是扩展方法扩展方法,就是能够向现有类型直接“添加”方法,而无需创建新的派生类型、重新编译或以其他方式修改现有类型。调用扩展方法的时候,与调用在类型中实际定义的方法相比没有明显的差异。为什么需要扩展方法考虑要实现这样的功能:从Redis取出包含多个商品ID......
  • java vue获取当月第一天和最后一天,当前周一和周日
    1,vue前端,通过moment获取当月第一天和最后一天,当前周一和周日letcurrDate=moment(newDate(),"YYYY-MM-DD");varfirstDay=moment(currDate.startOf("month").valueOf()).format('YYYY-MM-DD');//获取该月份第一天的时间戳varendDay=moment(cur......
  • Java-Day-1(Java了解 + DOS)
    Java-Day-1JAVA分辨了解Java创始人之一:詹姆斯·高斯林解释性语言,编译出.class后是有一个解释器的(编译性语言:C/C++——编译后的代码已经是二进制可以由机器直接执行了)面向对象的(oop)健壮的跨平台性的一个.java编译好的.class文件,无需再次编译,便既能在windows上......
  • Java-Day-2(转义字符 + 注释 + 代码规范 + 变量 + 数据类型)
    Java-Day-2常用转义字符代码中只一个\会默认转义(写在“”里)\t:制表位,可以实现对齐功能,可以看作有一个无形表框(上下两行长度相差不大)\n:换行符,仅换代码行的话\\:一个\,想输出"\\"就要输入四个\\'':一个“,字符串里输出双引号\':一个‘\r:一个回车,光标......
  • Java-String的常用方法总结
    一、String类  String类在java.lang包中,java使用String类创建一个字符串变量,字符串变量属于对象。java把String类声明的final类,不能继承。String类对象创建后不能修改,由0或多个字符组成,包含在一对双引号之间。二、String类构造方法  1、publicString()  无参构造方法,用来创......
  • 【妙用WebView】鸿蒙元服务中如何使用Java Script的API创建地图
    【关键字】webview地图高德腾讯地图百度地图 【问题背景】开发元服务过程中需要用到地图能力:卡片中显示我的快递位置和我的位置信息;PageAbility中可以打开自定义地图,查询POI点,做路径规划、路径推荐等;查看了高德、百度、华为、腾信地图的后发现,各大厂商对鸿蒙系统的支持能......
  • java不等于 等于
    起因:两个一样得String串对比 !=时返回false。 1、如 Stringstr="";Stringstr2=""; 则 str==str2 str!=str2  均返回结果不正确正确用法  str.Equals(str2) 或!str.Equals(str2); 2、在String使用前要做为null判断。写法:!"".Equals(str)&&str......
  • 重学Java设计模式-结构型模式-代理模式
    重学Java设计模式-结构型模式-代理模式内容摘自:https://bugstack.cn/md/develop/design-pattern/2020-06-16-重学Java设计模式《实战代理模式》.html#重学-java-设计模式-实战代理模式「模拟mybatis-spring中定义dao接口-使用代理类方式操作数据库原理实现场景」代理模式介绍......
  • java 启动错误idea 不报错误
    penapi.actionSystem.impl.Utils-updatefailedforAnAction(com.intellij.execution.ExecutorRegistryImpl$ExecutorAction)withID=MyBatisLogPluginjava.lang.IllegalStateException:@NotNul在项目拉取启动的时候就报出了这个错误首先查看idea的日志到底是什么报错 ......
  • Java 序列化详解
    XML和JSON是两种经常在网络使用的数据表示格式,这里我们介绍如何使用Java读写XML和JSON。 一、XML概述1、XML简介我们都知道对象是不能在网络中直接传输的,不过还有补救的办法。XML(ExtensibleMarkupLanguage)可扩展标记语言,本身就被设计用来存储数据,任何一个对象都可以用XML来描......