2012-11-22 2 views
3

PHP 또는 JavaScript에서와 같이 Java의 변수에 함수를 할당 할 수 있습니까?Java의 변수 함수

...이 영역은 Java와 관련하여 다른 방식으로 작동합니까?

+2

아니요 : Java에는 일류 기능이 없습니다. –

답변

4

당신이 반사를 통해 메소드를 호출 할 수 MethodMethodHandles을 가지고 있지만 아직 언어에서 지원되지 않습니다.

Java 8에서는 메소드에 대한 참조를 사용할 수 있습니다.

3

오늘의 자바에서는 그렇지 않습니다.

가장 가까운 인터페이스는 다음과 같습니다. 함수는 저장하지 않고 원하는 기능을 정의하는 인터페이스를 구현합니다.

전형적인 예는 the Comparator interface의 구현 : 자바에서

Comparator<ProductSearchResult> c = new Comparator<ProductSearchResult>() { 
    public int compare(ProductSearchResult result1, ProductSearchResult result2) { 
     return result1.product.getRsId().compareTo(result2.product.getRsId()); 
    } 
}; 
Collections.sort(groupResults, c); // I pass a function, wrapped in my Comparator implementation 
1

가장 가까운 것은 인터페이스와 결합 된 내부 클래스입니다. 이것들은 선호된다면 마스터 클래스 메소드로 다시 위임 될 수있는 하나의 기능 만이 아니라 많은 기능 (메소드)을 가질 수 있습니다. 그러나이 솔루션은 쉽게 너무 무거울 수 있습니다.

class Main { 

    interface X { 
    void doX(); 
    } 

    class Ref1 implements X { 
    void doX() { doA(); }; 
    } 

    class Ref2 implements X { 
    void doX() { doB(); }; 
    } 

    void doA() { }; 
    void doB() { }; 

    void demo() { 
     X x = new Ref1(); 
     x.doX(); 
    } 
} 
0

Java는이를 지원하지 않습니다.

그러나 JVM 언어로 매우 편안하게 처리 할 수 ​​있습니다. 그루비에서.

또는 command-pattern을 살펴보십시오.

0

이 ... (당신이 문자열 이외의 것을 사용하는 경우는 조금 더 캐스팅이 필요합니다,하지만 난 예제 간단한 유지하고있어) 람다에 비슷한 시뮬레이션

public class MyTest { 

    public static void main(String[] args) { 

     Lambda l = new Lambda() { public Object func(Object x) 
            { return "Hello " + x; } 
           }; 

     System.out.println(l.func("Bob")); 

     System.out.println(nowTryFromMethod(l)); 

     System.out.println((new Lambda() { public Object func(Object x) 
              { return "Goodbye " + x; } 
             }).func("Harry")); 
    } 

    private static Object nowTryFromMethod(Lambda l) { 
      return l.func("Jerry"); 
    } 
} 

class Lambda { 

    public Object func(Object x) { return null; } 
} 

출력 :

Hello Bob 
Hello Jerry 
Goodbye Harry