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.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

    Java扩展方法怎么创建

    通过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是一种广泛使用的编程语言,而扩展方法是Java中非常实用的一个特性。它可以让开发者无需修改已有的类,直接添加新的方法,且提高代码的可读性和可复用性。在这篇文章中,我们将探讨Java扩展方法是如何创建的。
    1.什么是扩展方法?
    扩展方法,就是在Java中,可以为某个类添加新的方法,避免了对类的修改。扩展方法不是在原来的类中定义方法,而是在一个新的类中定义静态方法,且该静态方法的第一个参数是需要扩展的类对象。通过使用扩展方法,可以为某个类添加新的功能,而不用改变该类的源代码。
    2.创建扩展方法
    为了创建扩展方法,首先需要创建一个新的静态类,该类名和文件名必须相同(例如,扩展java.lang.String类的扩展方法在类文件\"String.java\"中定义)。在这个静态类中,我们定义需要扩展的类对象,和我们想要添加的静态方法。
    例如,我们可以定义一个静态类\"StringExtension\",在这个类中定义一个静态方法\"printString\"。在这个方法中,需要加入字符串类型的参数,代表扩展的类对象,然后再添加需要具体实现的方法体。
    静态类的代码示例:
    ```
    public static class StringExtension {
    public static void printString(String s) {
    System.out.println(\"扩展方法:\" + s);
    }
    }
    ```
    然后,我们可以使用Java的import关键字,导入需要扩展的类,然后使用它来调用这个静态类的静态方法。这里以List接口为例,代码示例如下:
    ```
    import java.util.List;
    public class Main {
    public static void main(String[] args) {
    List list = Arrays.asList(\"Hello\", \"World\", \"Java\");
    StringExtension.printString(list.toString());
    }
    }
    ```
    3.总结
    通过使用Java的扩展方法,可以添加新的方法到一个类中,而不用修改这个类的源代码。使用扩展方法可以提高代码的可读性和可复用性。这种方法的创建步骤非常简单,只需定义一个扩展类,并在其中定义静态方法即可。我们相信,通过这篇文章,您已经掌握了Java扩展方法的创建方法。