如何在Java中创建扩展方法?
引言扩展方法能够向现有类型“添加”方法,而无需创建新的派生类型、重新编译或以其他方式修改原始类型。扩展方法是一种特殊的静态方法,但可以像扩展类型上的实例方法一样进行调用。对于用C#和VisualBasic编写的客户端代码,调用扩展方法与调用在类型中实际定义的方法没有明显的差异。支持扩展方法的语言其实比较多的编程语言都支持了扩展方法,如C#、VisualBasic、Kotlin等,但我们的Java语言就是迟迟不支持,在JDK9中开始支持以jmod方式扩展java功能,JDK16承诺给出动态库调用方案,但是作
引言
扩展方法能够向现有类型“添加”方法,而无需创建新的派生类型、重新编译或以其他方式修改原始类型。扩展方法是一种特殊的静态方法,但可以像扩展类型上的实例方法一样进行调用。对于用 C# 和 Visual Basic 编写的客户端代码,调用扩展方法与调用在类型中实际定义的方法没有明显的差异。
支持扩展方法的语言
其实比较多的编程语言都支持了扩展方法,如C#、Visual Basic、Kotlin等,但我们的Java语言就是迟迟不支持,在JDK9中开始支持以jmod方式扩展java功能,JDK16承诺给出动态库调用方案,但是作为JDK8的钉子户的我们如果也想使用扩展方法,就得另寻他路了。
C#
/// 扩展方法
public static class ExpandMethod {
/// 两个数相加
public static int Sum(this int num,int num2) {
return num + num2;
}
}
public class Program {
static void Main(string[] args) {
/// 调用位置
Console.WriteLine(3.Sum(2));
}
}Visual Basic
Imports System.Runtime.CompilerServices
Module Module3
Sub Main()
Dim ex As New ExampleClass
' 调用位置
ex.ExampleMethod("Extension method")
End Sub
Class ExampleClass
' Define an instance method named ExampleMethod.
Public Sub ExampleMethod()
Console.WriteLine("Instance method")
End Sub
End Class
Sub ExampleMethod(ByVal ec As ExampleClass,
ByVal stringParameter As String)
Console.WriteLine(stringParameter)
End Sub
End Module Kotlin
// 扩展函数(本类中扩展方法)
class Test1 {
var name: String = "boyi.chen"
}
fun Test1.temp() {
println("增加扩展函数,打印扩展类的属性name=${this.name}")
}
fun main(args: Array) {
// 调用位置
Test1().temp()
} 主角登场
Java8本身不支持扩展方法,但我们可以通过插件的方式实现扩展方法,用起来跟直接使用扩展方法一样一样的,Lombok就是其中的一款插件。
Lombok @ExtensionMethod
通过Lombok @ExtensionMethod注解,程序编译期间帮我们生成直接调用的静态方法,当然IDEA插件能提供更好的支持,下边看下具体的例子。
/**
* lombok测试
*
* @author reboot
*/
@ExtensionMethod(StringUtil.class)
public class LombokTest {
public static void main(String[] args) {
System.out.println("".isBlank());
}
/**
* 字符串工具
*
* @author reboot
*/
public static class StringUtil {
/**
* 字符串判空
*
* @param targetStr 目标str
* @return boolean
*/
public static boolean isBlank(String targetStr) {
return targetStr == null || "".equals(targetStr);
}
}
}编译后的内容可以看到方法已经从 "".isBlank() 转换为 LombokTest.StringUtil.isBlank(""),Lombok也正是通过这种方式提供给我们扩展方法的语法糖,真的好甜。

Windows 10 是一款微软推出的经典操作系统,拥有硬件兼容性与多任务处理能力。它更偏向把系统状态查看和常用调节动作放在一起,适合需要持续观察和微调设备状态的场景。
极度公式是一款跨平台专业LaTeX公式识别编辑软件,支持OCR公式识别和多平台编辑。和使用说明,避免使用,享受完整功能与稳定支持。做扫描整理、文字提取和表格转换时,它能把识别后的处理步骤接得更顺,资料录入这类场景会省下不少时间。
















