教你正確的Java擴展方法示例詳解
引言
擴展方法能夠向現(xiàn)有類型“添加”方法,而無需創(chuàng)建新的派生類型、重新編譯或以其他方式修改原始類型。擴展方法是一種特殊的靜態(tài)方法,但可以像擴展類型上的實例方法一樣進(jìn)行調(diào)用。對于用 C# 和 Visual Basic 編寫的客戶端代碼,調(diào)用擴展方法與調(diào)用在類型中實際定義的方法沒有明顯的差異。
支持?jǐn)U展方法的語言
其實比較多的編程語言都支持了擴展方法,如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本身不支持?jǐn)U展方法,但我們可以通過插件的方式實現(xiàn)擴展方法,用起來跟直接使用擴展方法一樣一樣的,Lombok就是其中的一款插件。
Lombok @ExtensionMethod
通過Lombok @ExtensionMethod注解,程序編譯期間幫我們生成直接調(diào)用的靜態(tài)方法,當(dāng)然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 目標(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也正是通過這種方式提供給我們擴展方法的語法糖,真的好甜。

Manifold
這里就不具體介紹了,感興趣的朋友可以看這篇文章 Java 缺失的特性:擴展方法 作者寫的還是比較全面的。
總結(jié)
擴展方法能夠使我們的代碼看起來更加簡潔,但是對于曾經(jīng)未接觸過的同學(xué),可能第一次碰到會比較懵,所以要適當(dāng)使用哦,上邊提到了兩種擴展方法的實現(xiàn)方式,如果項目中本來就引入了Lombok建議直接使用@ExtensionMethod比較好,不要再引入其他插件,這樣會增加項目接手和熟悉的成本,今天就講到這里,希望對閱讀本文章的你有所幫助。
以上就是教你正確的Java擴展方法示例詳解的詳細(xì)內(nèi)容,更多關(guān)于Java擴展方法的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Java switch case數(shù)據(jù)類型原理解析
這篇文章主要介紹了Java switch case數(shù)據(jù)類型原理解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-01-01
JavaWeb入門:HttpResponse和HttpRequest詳解
這篇文章主要介紹了Django的HttpRequest和HttpResponse對象,分享了相關(guān)代碼示例,小編覺得還是挺不錯的,具有一定借鑒價值,需要的朋友可以參考下2021-07-07
完美解決Logback configuration error detected的問題
這篇文章主要介紹了完美解決Logback configuration error detected的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-08-08

