Javaのlamda表現は解析を実現します。


Java 8はlambada表現を導入した。lamda表式は新機能ではなく、コードを便利にするために作られた文法飴です。
しかし、他の言語ではすでに一般的なlamban表現であっても、Javaでそれをサポートするには、下の互換性を考慮する必要があります。
簡単に言えば、Javaのlamban表現サポートは、約2つの側面を考慮する必要があります。
  • は、既存の方法の匿名クラス
  • の代わりに、lamban構文をサポートする必要がある。
  • は、既存のJDKにおいて、どのように新しい動作を追加するかを考慮する必要があります。
  • 一つ目の答えはFutional InterfaceのAnnotationで、二つ目の答えはdefault方法です。
    Funtional Inteface
    一つのインターフェースに@Funtional Interfaceを追加することによって、このインターフェースは特殊なインターフェースであることを表します。その特殊性は
  • このinterfaceは、サブクラスが
  • を実現するのを待つ抽象的な方法しかない。
  • の後、このinterfaceに対応するオブジェクトは、lambada式
  • であることができる。
  • lamda表現は、このinterfaceの唯一の抽象的な方法署名と一致しなければならない
  • 
    @FunctionalInterface
    public interface ITest {
      void sayHello(String name); 
    }
    
    public class Testlambda {
        public static String name = "test";
        public static void testRun2(ITest test){
          test.sayHello(name);
        }
        public static void main(String[] args) {
          testRun2(test->System.out.println(test));
        }
    }
    
    
    Default方法
    default方法はinterfaceでしか宣言できません。default方法は、interfaceがすでに実現された方法を定義することもできるようにする。それでは問題が来ました。インタフェースはなぜこの特性が必要ですか?javaのインタフェースは全部抽象的な方法だけあるべきではないですか?
    この例を考えてみます。
    
    List<Integer> alist = new ArrayList<Integer>();
    alist.add(1);
    alist.add(2);
    alist.add(3);
    alist.add(4);
    alist.forEach((s)->System.out.println(s));  
    ListはJDK java.utilのインターフェースです。このインターフェースは昔からあります。forEach方法を導入するには、lamban表現を使用することをサポートするためには、Listを変更する必要があります。しかし、JDKは下に互換性があり、既知のListにインターフェースを追加すると、互換性が確保できなくなります。だから、このために、何とかしてdefault方法を追加しました。これにより、一つのインターフェースは、JDK元のインターフェースを維持するためにデフォルトの方法を定義することができます。
    以上が本文の全部です。皆さんの勉強に役に立つように、私たちを応援してください。