자바 의 반전 함수 에 대하 여

3510 단어 자바리 턴 함수
더 읽 기
최근 에 내부 류 를 공부 할 때 자바 실현 리 턴 함수 체제 에 대해 더 알 게 되 었 습 니 다.스스로 정리 하고 비교 하 였 으 니 서로 토론 하 시기 바 랍 니 다.리 셋 이란 고객 류 가 내부 클래스 를 통 해 외부 클래스 를 호출 할 수 있 도록 하 는 방법 으로 매우 유연 한 기능 이다.자바 가 아직 패 킷 지원(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/

좋은 웹페이지 즐겨찾기