ラムダの怠惰なローディング技術
通常のコードスプライシングストリング
コード例
public class Demo01Logger {
public static void show(int i,String message)
{
if (i==1)
System.out.println(message);
}
public static void main(String[] args) {
String message1="Hello";
String message2="world";
String message3="world";
show(1,message1+message2+message3);
show(2,message1+message2+message3);
}
}
見つかった問題:
パフォーマンスの浪費の問題が見つかりました
.showメソッドを呼び出すと、渡される2番目のパラメーターはスプライスされた文字列です.show
メソッドに進む前に最初に文字列をスプライスします.show
メソッドでは、ログレベルが1でない
場合、スプライスは返されません。ひもの後、ひもはスプライシングで無駄になりました
ラムダ機能インターフェイスを使用して、文字列コードのスプライシングを実装します
機能的なインターフェイスを定義する
利点:
渡すパラメーターとしてラムダ式を使用し、パラメーターをshowメソッドに渡す
だけです。条件が満たされ、ログレベルがレベル1
の場合にのみ、インターフェイスshowのメソッドが呼び出され、
文字列がスプライスされ
ます。レベルが1でない場合、
インターフェイスに表示されるメソッドは実行されない
ため、スプライシングコードは実行されない
ため、パフォーマンスの無駄はありません。
@FunctionalInterface
public interface Demo02Logger {
String show();
}
要件を満たすクラスを定義する
import java.util.logging.Logger;
public class Demo02LoggerLambda {
public static void show(int i, Demo02Logger logger)
{
if (i==1)
System.out.println(logger.show());
}
public static void main(String[] args) {
String message1="Hello";
String message2="world";
String message3="world";
show(1,()->{return message1+message2+message3;});
show(2,()->{
System.out.println("不满足条件不执行!!!");
return message1+message2+message3;});
}
}