拡張メソッドを使用して、新しい派生型の作成、再コンパイル、または元の型の変更を行わずに、元の型を「追加」します。既存のタイプ。拡張メソッドは静的メソッドの特殊な形式ですが、拡張タイプのインスタンス メソッドと同じように呼び出すことができます。 C# および Visual Basic で記述されたクライアント コードの場合、拡張メソッドの呼び出しと、その型で実際に定義されたメソッドの呼び出しとの間に大きな違いはありません。
実際、C#、Visual Basic、Kotlin などの多くのプログラミング言語は拡張メソッドをサポートしていますが、Java 言語はまだサポートしていません。 JDK9 では jmod による Java 関数の拡張のサポートが開始され、JDK16 では動的ライブラリ呼び出しソリューションの提供が約束されましたが、JDK8 ユーザーとして拡張メソッドも使用したい場合は、別の方法を見つける必要があります。
/// 扩展方法 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)); } }
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
// 扩展函数(本类中扩展方法) class Test1 { var name: String = "boyi.chen" } fun Test1.temp() { println("增加扩展函数,打印扩展类的属性name=${this.name}") } fun main(args: Array<String>) { // 调用位置 Test1().temp() }
Java8自体は拡張メソッドをサポートしていませんが、プラグインを介して拡張メソッドを実装することは、拡張メソッドを直接使用することと同じです。Lombok はプラグインの 1 つです。
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 拡張メソッドの作成方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。