2011-08-17 17 views
24

¿Es posible definir una función dentro de una función en Java? Estoy tratando de hacer algo como:Función dentro de una función en Java

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

pero estoy consiguiendo error Illegal start of expression.

+4

¿Qué está tratando de lograr que necesite métodos anidados? –

+0

el código de función2 aparece tres veces en fun1 en mi código (es una gran función para correlacionar órdenes de bolsa (mi asignación de escuela)) y usa muchas variables locales de fun1. –

+0

Entonces, ¿cuál es el problema con tener dos métodos no anidados? Luego simplemente llame a function2 tantas veces como lo desee dentro de la función1 –

Respuesta

33

No se puede (y en Java se llaman métodos).

Puede, sin embargo, definir una clase anónima dentro de un método y llamar a sus métodos.

+3

Según lo veo, hay una diferencia entre métodos y funciones, mientras que las funciones viven solas, los métodos están relacionados con la clase o el objeto. – MByD

+0

@JP, ¿por qué? Las clases anónimas eran la alternativa de Java a los funtores. –

+1

La aclaración es útil ya que todos los documentos de Java usan esta noción. Harsh (o cualquier otra persona) encontrará que la respuesta a preguntas futuras sobre métodos es más fácil con la correcta asignación de nombres. – rics

35

La razón por la que no puede hacer esto es porque las funciones deben ser métodos asociados a una clase. A diferencia de JavaScript y lenguajes similares, las funciones no son un tipo de datos. Hay un movimiento para hacerlos uno para apoyar cierres en Java (con suerte en Java 8), pero a partir de Java 6 y 7, no es compatible. Si quisiera hacer algo similar, podría hacer esto:

interface MyFun { 
    void fun2(); 
} 

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

+1 para un buen ejemplo :) – MByD

Cuestiones relacionadas