자바는 본래 일류 함수 (데이터로서의 기능)를 가지고 있지는 않지만 기능 인터페이스의 개념을 가지고 있습니다. 특히 Java 8에서는 기능처럼 작동합니다. 기능 인터페이스의 개념은 간단합니다. 하나를 정의하려면, 당신이 할 일은과 같이, 단 하나의 방법으로 인터페이스를 제공하는 것입니다 :
public interface MyFunctionalInterface {
public void process();
}
당신은 선택적으로 클래스의 앞에 주석 @FunctionalInterface
을 배치 할 수 있습니다; 클래스에 둘 이상의 메소드가있는 경우 컴파일 오류가 발생합니다. 그런 다음 그 하나의 방법 (따라서 '호출'기능 인터페이스),이 인터페이스의 서브 클래스를 생성 서브 클래스의 변수를 생성하고 호출 할 수 있습니다 ... 다른
public class MyFunctionalClass implements MyFunctionalInterface {
@Override
public void process() {
System.out.println("Processed");
}
}
... 어딘가를
MyFunctionalInterface func = new MyFunctionalClass();
func.process();
첫 번째 클래스 기능을 시뮬레이트합니다.
익명 클래스로,이 작업을 수행하기위한 일반적인 방법입니다 :
MyFunctionalInterface func = new MyFunctionalInterface() {
@Override
public void process() {
System.out.println("Processed");
}
};
func.process();
그리고 자바 8
, 당신에게, 더욱이 단축 될 수 있습니다 :이 구문으로
MyFunctionalInterface func =() -> { System.out.println("Processed"); };
func.process();
사이에 넣어 (
및 )
매개 변수 의 이름이입니다. 컴파일러가 그것들을 알고 있기 때문에 타입의 이름을 지정할 필요가 없습니다!
는 따라서 group_cb
에 대한 부모의 인터페이스를 선언하고이 작업을 수행 할 수 있습니다
if (groupid == GROUPID_LUT.one)
group_cb = _one_cb;
else if (groupid == GROUPID_LUT.two)
group_cb = _two_cb;
else if (groupid == GROUPID_LUT.three)
group_cb = _three_cb;
else if (groupid == GROUPID_LUT.four)
group_cb = _four_cb;
else {
System.err.println("ERROR: Could not obtain group ID.");
System.exit(-1);
}
면책 조항 :이 코드 중 어느 것도 테스트하거나 실행되었습니다.
Java 방식을 사용하십시오. 인터페이스를 만들고 네 개의 별개 클래스 (익명 클래스 또는 람다)로 구현하십시오. 생성자에서 참조를 인스턴스화하고 할당합니다. –
가장 가까운 것은 https://docs.oracle.com/javase/tutorial/java/javaOO/methodreferences.html이지만 Java에는 실제 함수 유형이 없습니다. – zapl