2016-06-11 2 views
1

ClassMethod을 모두 매개 변수로 메서드에 전달하는 방법을 찾고 있습니다. 내가 줄이기를 원하는 반복적 인 코드 조각이있다.클래스 및 메서드를 매개 변수로 전달

public static void methodName(Class C, Method m) {   
    C.m.sendKeys("item");      
} 

가 어떻게이게 가능 :

나는 이런 식으로 뭔가를 원하는?

답변

0

예,이 경우 Consumer<...>을 사용할 수 있습니다. 예를 들어 :이 또한 인스턴스 메소드 작동

methodName(MyClass::methodToPass); 

구문과 함께 :

class MyClass { 
    public static void methodToPass(String arg) {...} 
} 

public static void methodName(Consumer<String> cons) { 
    cons.accept("item"); 
} 

는 다음과 같이 호출합니다 BiConsumer<...>를 사용하여,

MyClass mc = new MyClass(); 
methodName(mc::methodToPass); 

를 또는 어떤에서 첫 번째 인수가 전달 된 경우 메서드를 호출 할 인스턴스 여야합니다.

methodName(MyClass::methodToPass); 
이것은 당신이 전화하는거야 방법만큼 작동
public static void methodName(BiConsumer<MyClass, String> cons) { 
    MyClass mc = ...; 
    cons.accept(mc, "item"); 
} 

16,는 Consumer<...>에 대한 유형 매개 변수로 지정하는 유형의 하나 개의 인수를합니다.

Consumer<...>과 같은 다른 인터페이스를 사용하여 java.util.function 패키지의 다른 유형의 메서드에 사용할 수 있습니다.

1

Java 8에서는 λ로 전달 된 메소드 참조를 사용할 수 있습니다.

methodName(C::m); 

당신은 함수의 종류 (인수 및 반환 값)를 지정하고 기존 기능 인터페이스 중 하나를 사용하거나 자신을 정의 할 필요가있다.

예를 들어, 함수는 부울을 반환 입력으로 클래스 T의 오브젝트를하는 경우에는 미리 정의 된 기능 인터페이스 Predicate 사용할 수 있습니다

자바 8
public static void methodName(Item item, Predicate<Item> p) { 
    p.test(item); 
    // ... 
} 
+0

아니, 당신이 익명의 구현과 인터페이스를 통과 할 수 있습니다 초기 버전들 – Benedictus