2012-12-23 3 views
2

키 누름 이벤트를 내 라이브러리에 추가하려고합니다. 따라서 내 라이브러리의 클래스 중 하나에 매개 변수로 함수를 전달할 수 있습니까? 그러면 라이브러리에서 해당 함수를 실행해야합니까?매개 변수로 Java 함수

예 : 내 라이브러리에 뭔가 같은 키 누름으로 일어날 볼 때

Library lib = new Library(); 
lib.myAction(function(){ 
    // Do some java stuff here 
}); 

그래서 그와 함께, 그 기능을 해고 할 것이다. 모든 사람들이 자바 스크립트로 작업 한 적이 있다면 (실제로 jQuery와 공통적 인) 이것을 할 수 있습니다. 자바와 같은 효과를 원합니다.

+0

아마도 당신은 CR 수 : sampleMethod는 매개 변수가 다음 두 번째 매개 변수를 생략 할 수있다 각각의'function()'을 표현하는'enum '을 작성한 다음 전달하면됩니까? – bonCodigo

+0

JDK8에서 lambda를 사용하지 않고 Java에서 처리 할 수있는 방법은'Command' 또는'Strategy' 디자인 패턴을 구현하는 것입니다. – Xeon

답변

7

아니요, Java에 해당하는 것은 없습니다. 당신이 얻을 수있는 가장 가까운 인터페이스 또는 추상 클래스가 다음 구현하는 익명의 내부 클래스를 사용하는 것입니다/그것을 확장 :

lib.myAction(new Runnable() { 
    @Override public void run() { 
     // Do something here 
    } 
}); 

이 자바 8의 lambda expression support에 의해 훨씬 더 간단해야한다.

+0

언제든지 다음 Java 버전에서 이러한 기능을 기대합니다. – MrSmith42

0

자바에서는이 방법이 없습니다. 당신이 당신의 시켜라에 기능을하는 Method 객체를 (이 방법은 정적이어야 함) 전달하고 그것에서 전달 된 메소드를 호출 할 수 있습니다 그러나 다음과 같이하십시오 인수 매개 변수의 매개 변수 목록이라고

public Object myAction(Method m, Object... args) { 
    return m.invoke(args); 
} 

주 통과 된 방법. 예를 들어

, 당신은 다음과 같이 당신은 당신의 시켜라 메서드를 호출 할 수있는 클래스 및 A에 정의 된 정적 메소드 sampleMethod (문자열들) 있다고 가정

lib.myAction(A.class.getMethod("sampleMethod", String.class), "Value of parameter s"); 

을하면 당신의

lib.myAction(A.class.getMethod("sampleMethod", String.class)); 
관련 문제