@FunctionalInterface
public interface RunSomething {
void doit();
static void printName() {
System.out.println("이름");
}
default void printAge() {
System.out.println("나이");
}
}
자바 8 이전
//익명 내부 클래스
RunSomething runSomething = new RunSomeThing() {
@Override
public void doit() {
System.out.println("Hello");
}
}
자바 8 이후
RunSomething runSomething = () -> System.out.println("Hello");
RunSomething runSomething = () -> {
System.out.println("Hello");
System.out.println("lambda");
}
인자리스트
( )
(one) 또는 one
(one, two)
바디
{ }
를 사용해서 묶는다.{ }
생략 가능, return
도 생략 가능public class Greeting {
private String name;
public Greeting() {
}
public Greeting(String name) {
this.name = name;
}
public String hello(String name) {
return "hello " + name;
}
public static String hi(String name) {
return "hi " + name;
}
}
UnaryOperator<String> hi = (s) -> "hi " + s;
// 스태틱 메소드 참조
UnaryOperator<String> hi = Greeting::hi;
// 인스턴스 메소드 참조
Greeting greeting = new Greeting();
UnaryOperator<String> hi = greeting::hello;
// 기본 생성자
Supplier<Greeting> newGreeting = Greeting::new;
// 매개변수가 있는 생성자
Function<String, Greeting> newGreeting = Greeting::new;
Greeting greeting = newGreeting.get();