您好,欢迎访问一九零五行业门户网

Java扩展方法怎么创建

引言使用扩展方法可以在不创建新的派生类型、重新编译或以其他方式修改原始类型的情况下,“添加”方法到现有类型中。虽然扩展方法是静态方法的一种特殊形式,但它可以像扩展类型的实例方法一样被调用。对于用 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 basicimports system.runtime.compilerservicesmodule 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 <extension()> 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<string>) { // 调用位置 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也正是通过这种方式提供给我们扩展方法的语法糖,真的好甜。
以上就是java扩展方法怎么创建的详细内容。
其它类似信息

推荐信息