자바 의 반전 함수 에 대하 여
최근 에 내부 류 를 공부 할 때 자바 실현 리 턴 함수 체제 에 대해 더 알 게 되 었 습 니 다.스스로 정리 하고 비교 하 였 으 니 서로 토론 하 시기 바 랍 니 다.리 셋 이란 고객 류 가 내부 클래스 를 통 해 외부 클래스 를 호출 할 수 있 도록 하 는 방법 으로 매우 유연 한 기능 이다.자바 가 아직 패 킷 지원(Closure)을 표시 할 수 없 기 때문에 새 버 전 은 지원 할 수 있다 고 들 었 지만 아직 사용 해 본 적 이 없습니다.현재 일시 적 으로 사용 되 는 비정 상 내부 류 는 리 셋 기능 을 실현 한다.
상황 1:만약 에 선생님 Teacher 대상 이 있다 고 가정 하면 평소에 하 는 일 은 수업 이 고 주말 에 집에 서 농 사 를 짓 는 다(시골 선생님 들 은 대부분이 이렇다).방법 명 은 모두 work 이지 만 기능 이 다 르 기 때문에 내부 유형 으로 이런 수 요 를 실현 할 수 있다.
public class Teacher {
//
public void work() {
System.out.println(" ");
}
//
public void farming() {
System.out.println(" ");
}
private class Farmer {
// work ,
//
public void work() {
farming();
}
}
public Farmer getCallbackReference() {
return new Farmer();
}
public static void main(String[] args) {
Teacher t = new Teacher();
// work
t.work();
// Farmer work , Teacher farming
t.getCallbackReference().work();
}
}
상황 2:Swing 에서 응답 단 추 를 누 르 고 이 벤트 를 누 르 면 익명 내부 클래스 를 사용 합 니 다.서로 다른 컨트롤 에서 이벤트 가 발생 하면 외부 클래스 에 대응 하 는 처리 방법 을 되 돌 릴 수 있 습 니 다.
public class ButtonFrame extends JFrame {
//
private JButton redButton = new JButton("Red Button");
//
private JButton blueButton = new JButton("Blue Button");
//
private void processRedButton() {
System.out.println(" ");
}
//
private void processBlueButton() {
System.out.println(" ");
}
public ButtonFrame() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
redButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
// ButtonFrame
processRedButton();
}
});
blueButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
// ButtonFrame
processBlueButton();
}
});
getContentPane().add(redButton);
getContentPane().add(redButton);
}
public static void main(String[] args) {
new ButtonFrame().setVisible(true);
}
}
마지막 으로 C 언어 에서 이러한 반전 을 실현 하 는 체 제 는 바로 함수 포인터 의 방식 으로 이 루어 진 것 이다.《Pointers On C》라 는 책 에서 이 문 제 를 상세 하 게 설명 하 는 예 를 들 었 다.
형식 과 무관 한 함 수 를 만 들 려 면 하나의 링크 에서 지정 한 값 을 찾 습 니 다.이 링크 의 데이터 요 소 는 정수 일 수도 있 고 문자열 일 수도 있 습 니 다.따라서 함수 의 매개 변 수 는 유형 을 지정 할 수 없습니다.C 언어 에는 void 형식 이 있 습 니 다.모든 유형 을 가리 킬 수 있 습 니 다.이 를 통 해 유형 과 무관 한 링크 를 만들어 함 수 를 찾 을 수 있 습 니 다.
/**
* 。 1 ,
* ,
*
*
*/
#include ;
#include ;
/* */
Node * search_list() (Node *node, void const *value,
int (*compare) (void const *, void const *)) {
while (node != NULL) {
if (compare( &node->value, value) == 0) {
break;
}
node = node->link;
}
return node;
}
본인 의 블 로 그 는 이미 이 사 했 습 니 다.새 주 소 는:http://yidao620c.github.io/
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Is Eclipse IDE dying?In 2014 the Eclipse IDE is the leading development environment for Java with a market share of approximately 65%. but ac...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.