教你正确的Java扩展方法示例详解

 更新时间:2023年03月27日 15:02:53   作者:红兔哥  
这篇文章主要为大家介绍了教你正确的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 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
    <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也正是通过这种方式提供给我们扩展方法的语法糖,真的好甜。

Manifold

这里就不具体介绍了,感兴趣的朋友可以看这篇文章 Java 缺失的特性:扩展方法 作者写的还是比较全面的。

总结

扩展方法能够使我们的代码看起来更加简洁,但是对于曾经未接触过的同学,可能第一次碰到会比较懵,所以要适当使用哦,上边提到了两种扩展方法的实现方式,如果项目中本来就引入了Lombok建议直接使用@ExtensionMethod比较好,不要再引入其他插件,这样会增加项目接手和熟悉的成本,今天就讲到这里,希望对阅读本文章的你有所帮助。

以上就是教你正确的Java扩展方法示例详解的详细内容,更多关于Java扩展方法的资料请关注脚本之家其它相关文章!

相关文章

  • Spring Boot最经典的20道面试题你都会了吗

    Spring Boot最经典的20道面试题你都会了吗

    Spring Boot是现代化的Java应用程序开发框架,具有高度的灵活性和可扩展性,下面这篇文章主要给大家介绍了关于Spring Boot最经典的20道面试题,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2024-06-06
  • Springmvc自定义异常处理器实现流程解析

    Springmvc自定义异常处理器实现流程解析

    这篇文章主要介绍了Springmvc自定义异常处理器实现流程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-07-07
  • SpringCloud Eureka实现服务注册与发现

    SpringCloud Eureka实现服务注册与发现

    Eureka是一种基于REST(具像状态传输)的服务,主要用于AWS云中定位服务,以实现中间层服务器的负载平衡和故障转移。本文记录一个简单的服务注册与发现实例。感兴趣的小伙伴们可以参考一下
    2019-01-01
  • SpringBoot解析指定Yaml配置文件的实现过程

    SpringBoot解析指定Yaml配置文件的实现过程

    这篇文章主要介绍了SpringBoot解析指定Yaml配置文件,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-03-03
  • springboot项目编译提示无效的源发行版17解决办法

    springboot项目编译提示无效的源发行版17解决办法

    这篇文章主要给大家介绍了关于springboot项目编译提示无效的源发行版17解决办法,这个错误意味着你的Spring Boot项目正在使用Java 17这个版本,但是你的项目中未配置正确的Java版本,需要的朋友可以参考下
    2023-06-06
  • Java sort集合排序的两种方式解析

    Java sort集合排序的两种方式解析

    这篇文章主要介绍了Java sort集合排序的两种方式解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-11-11
  • Spring Boot 接口参数加密解密的实现方法

    Spring Boot 接口参数加密解密的实现方法

    这篇文章主要介绍了Spring Boot 接口参数加密解密的实现方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-03-03
  • Springboot之@Async不执行原因及分析

    Springboot之@Async不执行原因及分析

    这篇文章主要介绍了Springboot之@Async不执行原因及分析,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-09-09
  • Spring Boot 2 Thymeleaf服务器端表单验证实现详解

    Spring Boot 2 Thymeleaf服务器端表单验证实现详解

    这篇文章主要介绍了Spring Boot 2 Thymeleaf服务器端表单验证实现详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-11-11
  • Java 你知道什么是耦合、如何解(降低)耦合

    Java 你知道什么是耦合、如何解(降低)耦合

    这篇文章主要介绍了Java 你知道什么是耦合、如何解(降低)耦合的操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-09-09

最新评论