欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

教你正確的Java擴展方法示例詳解

 更新時間:2023年03月27日 15:02:53   作者:紅兔哥  
這篇文章主要為大家介紹了教你正確的Java擴展方法示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪

引言

擴展方法能夠向現(xiàn)有類型“添加”方法,而無需創(chuàng)建新的派生類型、重新編譯或以其他方式修改原始類型。擴展方法是一種特殊的靜態(tài)方法,但可以像擴展類型上的實例方法一樣進行調(diào)用。對于用 C# 和 Visual Basic 編寫的客戶端代碼,調(diào)用擴展方法與調(diào)用在類型中實際定義的方法沒有明顯的差異。

支持擴展方法的語言

其實比較多的編程語言都支持了擴展方法,如C#、Visual Basic、Kotlin等,但我們的Java語言就是遲遲不支持,在JDK9中開始支持以jmod方式擴展java功能,JDK16承諾給出動態(tài)庫調(diào)用方案,但是作為JDK8的釘子戶的我們?nèi)绻蚕胧褂脭U展方法,就得另尋他路了。

C#

/// 擴展方法
public static class ExpandMethod {
    /// 兩個數(shù)相加
    public static int Sum(this int num,int num2) {
        return num + num2;
    }
}
public class Program {
    static void Main(string[] args) {
        /// 調(diào)用位置
        Console.WriteLine(3.Sum(2));
    }
}

Visual Basic

Imports System.Runtime.CompilerServices
Module Module3
    Sub Main()
        Dim ex As New ExampleClass
        ' 調(diào)用位置
        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

// 擴展函數(shù)(本類中擴展方法)
class Test1 {
    var name: String = "boyi.chen"
}
fun Test1.temp() {
    println("增加擴展函數(shù),打印擴展類的屬性name=${this.name}")
}
fun main(args: Array<String>) {
    // 調(diào)用位置
    Test1().temp()
}

主角登場

Java8本身不支持擴展方法,但我們可以通過插件的方式實現(xiàn)擴展方法,用起來跟直接使用擴展方法一樣一樣的,Lombok就是其中的一款插件。

Lombok @ExtensionMethod

通過Lombok @ExtensionMethod注解,程序編譯期間幫我們生成直接調(diào)用的靜態(tài)方法,當然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);
        }
    }
}

編譯后的內(nèi)容可以看到方法已經(jīng)從 "".isBlank() 轉(zhuǎn)換為 LombokTest.StringUtil.isBlank(""),Lombok也正是通過這種方式提供給我們擴展方法的語法糖,真的好甜。

Manifold

這里就不具體介紹了,感興趣的朋友可以看這篇文章 Java 缺失的特性:擴展方法 作者寫的還是比較全面的。

總結(jié)

擴展方法能夠使我們的代碼看起來更加簡潔,但是對于曾經(jīng)未接觸過的同學,可能第一次碰到會比較懵,所以要適當使用哦,上邊提到了兩種擴展方法的實現(xiàn)方式,如果項目中本來就引入了Lombok建議直接使用@ExtensionMethod比較好,不要再引入其他插件,這樣會增加項目接手和熟悉的成本,今天就講到這里,希望對閱讀本文章的你有所幫助。

以上就是教你正確的Java擴展方法示例詳解的詳細內(nèi)容,更多關(guān)于Java擴展方法的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Java實現(xiàn)FutureTask的示例詳解

    Java實現(xiàn)FutureTask的示例詳解

    在并發(fā)編程當中我們最常見的需求就是啟動一個線程執(zhí)行一個函數(shù)去完成我們的需求,而在這種需求當中,我們需要函數(shù)有返回值。Java給我們提供了這種機制,去實現(xiàn)這一個效果:FutureTask。本文為大家準備了Java實現(xiàn)FutureTask的示例代碼,需要的可以參考一下
    2022-08-08
  • Lombok的詳細使用及優(yōu)缺點總結(jié)

    Lombok的詳細使用及優(yōu)缺點總結(jié)

    最近在學Mybatis,接觸到了Lombok的使用,所以寫一篇文章記錄一下,包括lombok的安裝及使用優(yōu)缺點,感興趣的朋友跟隨小編一起看看吧
    2021-07-07
  • java實現(xiàn)將數(shù)字轉(zhuǎn)換成人民幣大寫

    java實現(xiàn)將數(shù)字轉(zhuǎn)換成人民幣大寫

    前面給大家介紹過使用javascript,php,c#,python等語言實現(xiàn)人民幣大寫格式化,這篇文章主要介紹了java實現(xiàn)將數(shù)字轉(zhuǎn)換成人民幣大寫的代碼,非常的簡單實用,分享給大家,需要的朋友可以參考下
    2015-04-04
  • java刪除數(shù)組中的某一個元素的方法

    java刪除數(shù)組中的某一個元素的方法

    下面小編就為大家?guī)硪黄猨ava刪除數(shù)組中的某一個元素的方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-01-01
  • SpringMVC中的ConversionServiceExposingInterceptor工具類解析

    SpringMVC中的ConversionServiceExposingInterceptor工具類解析

    這篇文章主要介紹了SpringMVC中的ConversionServiceExposingInterceptor工具類解析,ConversionServiceExposingInterceptor是Spring MVC的一個HandlerInterceptor,用于向請求添加一個屬性,需要的朋友可以參考下
    2023-12-12
  • Java正則表達式API字符類

    Java正則表達式API字符類

    這篇文章主要介紹了Java正則表達式API字符類,Java正則表達式API也接受預定義的字符類,下面文章內(nèi)容展開了更多的相關(guān)內(nèi)容介紹,需要的朋友可以參考一下
    2022-06-06
  • Java攔截過濾器模式 (Intercepting Filter )實現(xiàn)方法

    Java攔截過濾器模式 (Intercepting Filter )實現(xiàn)方法

    攔截過濾器模式(Intercepting Filter Pattern)用于對應用程序的請求或響應做一些預處理/后處理,本文通過實例代碼介紹Java攔截過濾器模式 (Intercepting Filter )的相關(guān)知識,感興趣的朋友跟隨小編一起看看吧
    2024-03-03
  • Java8函數(shù)式接口java.util.function速查大全

    Java8函數(shù)式接口java.util.function速查大全

    因為Java8引入了函數(shù)式接口,在java.util.function包含了幾大類函數(shù)式接口聲明,這篇文章主要給大家介紹了關(guān)于Java8函數(shù)式接口java.util.function速查的相關(guān)資料,需要的朋友可以參考下
    2021-08-08
  • Mybatis中foreach標簽帶來的空格\換行\(zhòng)回車問題及解決方案

    Mybatis中foreach標簽帶來的空格\換行\(zhòng)回車問題及解決方案

    這篇文章主要介紹了解決Mybatis中foreach標簽帶來的空格,換行,回車問題,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-04-04
  • Springboot集成RabbitMQ并驗證五種消息模型

    Springboot集成RabbitMQ并驗證五種消息模型

    RabbitMQ 提供了5種常用消息模型,本文主要介紹了Springboot集成RabbitMQ并驗證五種消息模型,具有一定的參考價值,感興趣的可以了解一下
    2024-03-03

最新評論