首頁 >Java >java教程 >Java擴充方法怎麼創建

Java擴充方法怎麼創建

WBOY
WBOY轉載
2023-05-26 23:23:121717瀏覽

    引言

    使用擴展方法可以在不創建新的派生類型、重新編譯或以其他方式修改原始類型的情況下,“添加”方法到現有類型中。雖然擴充方法是靜態方法的一種特殊形式,但它可以像擴充類型的實例方法一樣被呼叫。對於用 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也正是透過這種方式提供給我們擴充方法的語法糖,真的好甜。

    Java擴充方法怎麼創建

    以上是Java擴充方法怎麼創建的詳細內容。更多資訊請關注PHP中文網其他相關文章!

    陳述:
    本文轉載於:yisu.com。如有侵權,請聯絡admin@php.cn刪除