开发者

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

开发者 https://www.devze.com 2023-03-29 10:28 出处:网络 作者: 红兔哥
目录引言支持扩展方法的语言C#Visual BasicKotlin主角登场Lombok @ExtensionMethodManifold总结引言
目录
  • 引言
  • 支持扩展方法的语言
    • C#
    • Visual Basic
    • Kotlin
  • 主角登场
    • Lombok @ExtensionMethod
    • Manifold
  • 总结

    引言

    扩展方法能够向现有类型“添加”方法,而无需创建新的派生类型、重新编译或以其他方式修改原始开发者_C入门类型。扩展方法是一种特殊的静态方法,但可以像扩展类型上的实例方法一样进行调用。对于用 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;
        js}
    }
    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 booleaandroidn isBlank(String targetStr) {
       python         return targetStr ==编程 null || "".equals(targetStr);
            }
        }
    }
    

    编译后的内容可以看到方法已经从 "".isBlank() 转换为 LombokTest.StringUtil.isBlank(""),Lombok也正是通过这种方式提供给我们扩展方法的语法糖,真的好甜。

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

    Manifold

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

    总结

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

    以上就是教你正确的Java扩展方法示例详解的详细内容,更多关于Java扩展方法的资料请关注我们www.devze.com其它相关文章!

    0

    精彩评论

    暂无评论...
    验证码 换一张
    取 消

    关注公众号