Parameter와 함수 본체 사이 -> 표시
interface Printable{ public abstract void print(String s); public abstract void print2(String s); } -------> 람다 구현 X
@FunctionalInterface -> 추상함수 숫자 제한 가능 ( Printable에 오류 발생 )
Printable prn = (String s) -> { System.out.println(s); }; prn.print("(1)"); prn = (s) -> { System.out.println(s); }; prn.print("(2)"); prn = s -> { System.out.println(s); }; prn.print("(3)"); prn = s -> System.out.println(s); prn.print("(4)");
@FunctionalInterface interface Calculate{ void cal(int a,int b); } public class LamdaExample { public static void main(String args[]) { Calculate cal; cal = (int a,int b) -> { System.out.println("(1)"+(a+b)); }; cal.cal(4, 3); cal = (a, b) -> { System.out.println("(2)"+(a+b)); }; cal.cal(4, 3); cal = (a, b) -> System.out.println("(3)"+(a+b)); cal.cal(4, 3); } }
@FunctionalInterface interface Calculate2{ int cal(int a,int b); } public class LamdaExample { public static void main(String args[]) { Calculate cal; Calculate2 cal2; cal2 = (a,b) -> { return a+b; }; // return 문의 중괄호는 생략 불가 System.out.println(cal2.cal(3,5)); cal2 = (a,b) -> a+b; // return 생략가능 System.out.println("(2)"+cal2.cal(3,5)); } } Ex> @FunctionalInterface interface HowLong{ int len(String s); } public class LamdaExample { public static void main(String args[]) { HowLong h = s->s.length(); System.out.println(h.len("안녕하세요")); } }
//람다식과 제네릭 interface Calculate3<T> { T cal(T a, T b); // 제네릭 기반의 함수형 인터페이스 } //interface Calculate3 { // Integer cal(Integer a, Integer b); // 메인에 Integer로 선언하면 이런 식으로 메모리에 저장 //}
✔ main
public class LambdaExample { public static void getHowLong(HowLong howLong, String s) { System.out.println(howLong.len(s)); } public static void main(String[] args) { Calculate3<Integer> cl = (Integer a, Integer b) -> { return a + b; }; }