찾다
Javajava지도 시간익명 클래스를 사용하여 Java에서 콜백 함수를 구현하는 방법에 대한 설명 예

이 기사에서는 익명 클래스를 통해 Java에서 콜백 함수를 구현하는 예를 주로 소개합니다. 콜백 함수는 함수 시그니처(여러 입력 매개변수, 하나의 출력 매개변수)의 사양이지만 Java에서는 인터페이스를 사용하여 강제할 수 있습니다. 규정. 구체적인 동작 단계에 대한 자세한 설명은 아래에서 확인하실 수 있으며, 관심 있는 친구들은 참고하실 수 있습니다.

C 언어에서는 함수 이름을 형식 매개변수에 대한 함수 포인터로 전달하여 콜백을 구현할 수 있습니다.


void f1() { printf("f1()\n"); }
void f2() { printf("f2()\n"); }
void f3() { printf("f3()\n"); }
void do_func(void(*f)()) { f(); }
int main()
{
  do_func(f1);
  do_func(f2);
  do_func(f3);
}

C++11에서는 함수 템플릿과 람다 표현식을 통해 콜백을 구현할 수도 있습니다.


template <typename Func>
void do_func(Func f) { f(); }
int main()
{
  do_func([]() { printf("f1()"); });
  do_func([]() { printf("f2()"); });
  do_func([]() { printf("f3()"); });
}

If 콜백 함수의 코드 구현은 상대적으로 복잡하고 재사용 가치가 있으므로 람다 표현식과 같은 일회성 솔루션은 적합하지 않습니다. C++11 이전에는 함수 개체를 통해 구현되었습니다. 직설적으로 말하면 함수 객체는 클래스의 일반적인 객체이지만 C++에서는 대괄호 연산자를 오버로드할 수 있으므로 클래스 객체의 Operator() 메서드를 호출하는 것이 함수를 호출하는 것처럼 자연스럽습니다.

본질을 분석해 보면 사실 콜백 함수는 함수 시그니처(여러 개의 입력 매개변수, 하나의 출력 매개변수)의 사양입니다. Java에서는 함수 선언이 없지만 인터페이스를 사용하여 사양을 적용할 수 있습니다.


interface Funcable {
  void Func();
}

이런 식으로 인터페이스를 구현하는 클래스에 void Func()와 동일한 함수 시그니처를 가진 멤버 함수가 있는 한(아직은 name 메서드가 익숙하지 않아서) 구현해야 함 이 인터페이스가 있는 클래스의 객체를 함수에 전달한 다음 함수


class F1 implements Funcable {

  @Override
  public void Func() {
    System.out.println("f1()");
  } 
}
public class Test {
  
  public static void do_func(Funcable funcable) {
    funcable.Func();
  } 
  public static void main(String[] args) {
    do_func(new F1());
  }
}

에서 객체의 Func() 메서드를 호출합니다. 여기에서 코드 양을 절약하려면 F2 및 F3 클래스가 쓰지 마세요. 그리고 Java의 익명 클래스를 사용하면 람다 표현식과 유사하게 코드를 저장할 수 있습니다


  do_func(new Funcable() {      
      @Override
      public void Func() {
        System.out.println("f2()");
      }
    });

람다 표현식에 대해 말하면 외부 변수를 캡처할 수 있습니다. Java에서는 익명 생성자를 통해 이 방법을 수행할 수도 있습니다. 외부 변수를 명시적으로 캡처합니다


  String msg = "f3()";
    do_func(new Funcable() {
      String _msg; 
      {
        _msg = msg;
      } 
      @Override
      public void Func() {
        System.out.println(_msg);
      }
    });

이 접근 방식은 람다 식과 매우 유사합니다. 익명 클래스의 익명 생성자는 외부 변수만 생성 매개변수로 사용할 수 있기 때문입니다. 이는 람다 식의 "캡처"와 동일하며 C++에서 람다 식의 해당 작성 방법은 다음과 같습니다.


 std::string msg = "f3()";
  do_func([&msg]() { std::cout << msg << std::endl; });

java8에도 람다 표현이 있어서 이렇게 쓸 수 있어요

do_func(() -> { System.out.println(msg); });

위 내용은 익명 클래스를 사용하여 Java에서 콜백 함수를 구현하는 방법에 대한 설명 예의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

뜨거운 도구

VSCode Windows 64비트 다운로드

VSCode Windows 64비트 다운로드

Microsoft에서 출시한 강력한 무료 IDE 편집기

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

MinGW - Windows용 미니멀리스트 GNU

MinGW - Windows용 미니멀리스트 GNU

이 프로젝트는 osdn.net/projects/mingw로 마이그레이션되는 중입니다. 계속해서 그곳에서 우리를 팔로우할 수 있습니다. MinGW: GCC(GNU Compiler Collection)의 기본 Windows 포트로, 기본 Windows 애플리케이션을 구축하기 위한 무료 배포 가능 가져오기 라이브러리 및 헤더 파일로 C99 기능을 지원하는 MSVC 런타임에 대한 확장이 포함되어 있습니다. 모든 MinGW 소프트웨어는 64비트 Windows 플랫폼에서 실행될 수 있습니다.

WebStorm Mac 버전

WebStorm Mac 버전

유용한 JavaScript 개발 도구

SublimeText3 Linux 새 버전

SublimeText3 Linux 새 버전

SublimeText3 Linux 최신 버전