您好,登錄后才能下訂單哦!
這篇文章主要講解了“Java擴(kuò)展方法怎么創(chuàng)建”,文中的講解內(nèi)容簡單清晰,易于學(xué)習(xí)與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“Java擴(kuò)展方法怎么創(chuàng)建”吧!
擴(kuò)展方法能夠向現(xiàn)有類型“添加”方法,而無需創(chuàng)建新的派生類型、重新編譯或以其他方式修改原始類型。擴(kuò)展方法是一種特殊的靜態(tài)方法,但可以像擴(kuò)展類型上的實(shí)例方法一樣進(jìn)行調(diào)用。對于用 C# 和 Visual Basic 編寫的客戶端代碼,調(diào)用擴(kuò)展方法與調(diào)用在類型中實(shí)際定義的方法沒有明顯的差異。
其實(shí)比較多的編程語言都支持了擴(kuò)展方法,如C#、Visual Basic、Kotlin等,但我們的Java語言就是遲遲不支持,在JDK9中開始支持以jmod方式擴(kuò)展java功能,JDK16承諾給出動(dòng)態(tài)庫調(diào)用方案,但是作為JDK8的釘子戶的我們?nèi)绻蚕胧褂脭U(kuò)展方法,就得另尋他路了。
/// 擴(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)); } }
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
// 擴(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() }
Java8本身不支持?jǐn)U展方法,但我們可以通過插件的方式實(shí)現(xiàn)擴(kuò)展方法,用起來跟直接使用擴(kuò)展方法一樣一樣的,Lombok就是其中的一款插件。
通過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也正是通過這種方式提供給我們擴(kuò)展方法的語法糖,真的好甜。
感謝各位的閱讀,以上就是“Java擴(kuò)展方法怎么創(chuàng)建”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對Java擴(kuò)展方法怎么創(chuàng)建這一問題有了更深刻的體會,具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是億速云,小編將為大家推送更多相關(guān)知識點(diǎn)的文章,歡迎關(guān)注!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。