하나의 추상 메서드
만 선언된 인터페이스@FunctionalInterface
interface MyFunction {
public abstract int max(int a, int b);
}
MyFunction f = new MyFunction(){
public int max(int a, int b){
return a > b ? a : b;
}
}
Object타입이 아닌 함수형 인터페이스로 선언 및 구현했기 떄문에 max 함수를 사용할 수 있다!
함수형 인터페이스 타입의 참조변수로 람다식을 참조할 수 있음
- 단, 함수형 인터페이스의 메서드와 람다식의 매개변수 개수와 반환 타입이 일치해야 함
MyFunction f = (a, b) -> a > b ? a : b; int value = f.max(3, 5); // 실제로는 람다식이 호출됨
함수형 인터페이스는 람다식을 사용하기 위해 사용한다
접근 제어자는 좁게 못 바꾼다
규칙을 지켜야 하므로 인터페이스를 선언 및 객체 생성할 때에 public 접근 제어자를 붙여주어야 한다class ex{
public statid void main(String[] args){
Myfunction2 = new MyFunction2(){
public int max(int a, int b){
return a > b ? a : b;
}
};
int value - f.max(3,5); // 함수형 인터페이스
}
}
@FunctionalInterface
interface MyFunction2{
//public abstract ...
int max(int a, int b);
}
class ex{
public statid void main(String[] args){
Myfunction2 = new MyFunction2(){
public int max(int a, int b){
return a > b ? a : b;
}
};
// 람다식을 다루기 위한 참조변수의 타입은 함수형 인터페이스로 한다
MyFunction2 f = (a, b) -> a > b ? a : b; // 람다식, 익명 객체
int value - f.max(3,5); // 함수형 인터페이스
}
}
@FunctionalInterface
interface MyFunction2{
//public abstract ...
int max(int a, int b);
}
List<String> list = Arrays.asList("abc", "aaa", "bbb", "ddd", "aaa");
Collections.sort(list, new Comparator<String>(){
public int compare(String s1, String s2){
return s2.compareTo(s1);
}
});
@FunctionalInterface
interface Cmoparator<T>{
int compare(T o1, T o2);
}
Comparator c = (s1, s2) -> s2.compareTo(s1);
함수형 인터페이스
List<String> list = Arrays.asList("abc", "aaa", "bbb", "ddd", "aaa");
Collections.sort(list, (s1, s2) -> s2.compareTo(s1));
매개변수
void aMethod(MyFunction f){
f.myMethod(); // MyFunction에 정의된 메서드 호출
}
@FunctionalInterface
interface MyFunction{
void myMethod();
}
MyFunction f = () -> System.out.println("myMethod()");
aMethod(f);
위 문장을 한 줄로
aMethod(() -> System.out.println("myMethod()"));
반환 타입
MyFunction myMethod(){
MyFunction f = () -> {};
return f;
}
위 문장을 한 줄로
MyFunction myMethod(){
return () -> {};
}