最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

教你正確的Java擴(kuò)展方法示例詳解

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

引言

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

支持?jǐn)U展方法的語言

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

C#

/// 擴(kuò)展方法
public static class ExpandMethod {
    /// 兩個(gè)數(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

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

主角登場(chǎng)

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

Lombok @ExtensionMethod

通過Lombok @ExtensionMethod注解,程序編譯期間幫我們生成直接調(diào)用的靜態(tài)方法,當(dāng)然IDEA插件能提供更好的支持,下邊看下具體的例子。

/**
 * lombok測(cè)試
 *
 * @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 目標(biāo)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也正是通過這種方式提供給我們擴(kuò)展方法的語法糖,真的好甜。

Manifold

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

總結(jié)

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

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

相關(guān)文章

  • java集合類遍歷的同時(shí)如何進(jìn)行刪除操作

    java集合類遍歷的同時(shí)如何進(jìn)行刪除操作

    這篇文章主要介紹了java集合類遍歷的同時(shí)如何進(jìn)行刪除操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • Java使用JMeter進(jìn)行高并發(fā)測(cè)試

    Java使用JMeter進(jìn)行高并發(fā)測(cè)試

    軟件的壓力測(cè)試是一種保證軟件質(zhì)量的行為,本文主要介紹了Java使用JMeter進(jìn)行高并發(fā)測(cè)試,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • Java線程中的ThreadLocal詳細(xì)分析

    Java線程中的ThreadLocal詳細(xì)分析

    這篇文章主要介紹了Java線程中的ThreadLocal詳細(xì)分析,ThreadLocal?提供線程的局部變量,每個(gè)線程都可以通過?get()和?set()對(duì)局部變量進(jìn)行操作而不會(huì)對(duì)其他線程的局部變量產(chǎn)生影響,實(shí)現(xiàn)了線程之間的數(shù)據(jù)隔離,需要的朋友可以參考下
    2023-09-09
  • Spring執(zhí)行sql腳本文件的方法

    Spring執(zhí)行sql腳本文件的方法

    這篇文章主要介紹了Spring執(zhí)行sql腳本文件的方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2019-03-03
  • WordPress中卸載插件以及移除文章類型組件的代碼示例

    WordPress中卸載插件以及移除文章類型組件的代碼示例

    這篇文章主要介紹了WordPress中卸載插件以及移除文章類型組件的代碼示例,包括卸載函數(shù)鉤子的方法介紹,需要的朋友可以參考下
    2015-12-12
  • Java switch case數(shù)據(jù)類型原理解析

    Java switch case數(shù)據(jù)類型原理解析

    這篇文章主要介紹了Java switch case數(shù)據(jù)類型原理解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-01-01
  • Java實(shí)現(xiàn)簡(jiǎn)單的五子棋小游戲

    Java實(shí)現(xiàn)簡(jiǎn)單的五子棋小游戲

    這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)簡(jiǎn)單的五子棋小游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-10-10
  • JavaWeb入門:HttpResponse和HttpRequest詳解

    JavaWeb入門:HttpResponse和HttpRequest詳解

    這篇文章主要介紹了Django的HttpRequest和HttpResponse對(duì)象,分享了相關(guān)代碼示例,小編覺得還是挺不錯(cuò)的,具有一定借鑒價(jià)值,需要的朋友可以參考下
    2021-07-07
  • Java中的集合工具類Collections詳解

    Java中的集合工具類Collections詳解

    這篇文章主要介紹了Java中的集合工具類Collections詳解,java.utils.Collections是集合工具類,用來對(duì)集合進(jìn)行操作,不是Collection集合的根接口,這個(gè)要區(qū)分開來,需要的朋友可以參考下
    2024-01-01
  • 完美解決Logback configuration error detected的問題

    完美解決Logback configuration error detected的問題

    這篇文章主要介紹了完美解決Logback configuration error detected的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-08-08

最新評(píng)論

兴城市| 克什克腾旗| 石景山区| 融水| 綦江县| 龙口市| 海南省| 东乡族自治县| 从江县| 南昌县| 清镇市| 榆社县| 徐汇区| 蚌埠市| 墨竹工卡县| 和龙市| 安宁市| 永宁县| 乌拉特前旗| 曲水县| 巴里| 五华县| 宜州市| 衡南县| 黄梅县| 浠水县| 镇江市| 宝山区| 阜新| 桃园市| 崇文区| 云龙县| 连山| 惠州市| 通化县| 伽师县| 阳山县| 上虞市| 乐东| 崇仁县| 五原县|