2011-08-17 8 views
24

Java 함수에서 함수를 정의 할 수 있습니까? 나는 다음과 같이하려고 노력하고있다 :Java 함수 내 함수

public static boolean fun1() 
{ 
    static void fun2() 
    { 
    body of function. 
    fun2(); 
    } 
    return returnValue; 
} 

그러나 나는 오류 Illegal start of expression를 얻고있다.

+4

중첩 된 메소드가 필요한 작업은 무엇입니까? –

+0

function2의 코드는 내 코드에서 fun1로 세 번 나타납니다 (내 교역 주문과 일치하는 큰 기능 임). fun1의 많은 지역 변수를 사용합니다. –

+0

그래서 두 개의 중첩되지 않은 메소드를 갖는 데있어서의 문제점은 무엇입니까? 그런 다음 function2 내에서 원하는만큼 여러 번 function2를 호출하십시오. –

답변

33

당신은 할 수 없습니다. (자바에서는 메소드라고 부릅니다.)

그러나 익명의 클래스를 메서드 내부에서 정의하고 해당 메서드를 호출 할 수 있습니다.

+3

필자가 보았 듯이 메서드와 함수에는 차이가 있으며 함수는 자체적으로 살아 있고 메서드는 클래스 또는 개체와 관련이 있습니다. – MByD

+0

@JP, 이유가 무엇입니까? 익명 클래스는 펑터에 대한 Java의 대안이었습니다. –

+1

설명은 모든 Java 문서가이 개념을 사용하기 때문에 유용합니다. 가혹한 (또는 다른 누구) 정확한 이름을 붙여보다 쉬운 방법에 대한 미래의 질문에 대한 답을 쉽게 찾을 수 있습니다. – rics

35

이렇게 할 수없는 이유는 함수가 클래스에 연결된 메소드 여야하기 때문입니다. JavaScript 및 유사한 언어와 달리 함수는 데이터 유형이 아닙니다. 자바로 클로저를 지원하기위한 움직임이 있지만 (Java 8에서는 가능), Java 6 및 7에서는 클로저가 지원되지 않습니다. 유사한 작업을 수행하려는 경우 다음을 수행 할 수 있습니다.

interface MyFun { 
    void fun2(); 
} 

public static boolean fun1() 
{ 
    MyFun fun2 = new MyFun() { 
     public void fun2() { 
      //.... 
     } 
    }; 
    fun2.fun2(); 
    return returnValue; 
} 
+2

+1 좋은 예를 들어 :) – MByD