Actualización 02/09/2014:
JDK 8 lambdas introducidas (expresiones de funciones anónimas) que le permiten resolver de esta manera:
Function<String, String> trible = s -> s+s+s;
System.out.println(trible.apply("X")); // prints XXX
(JDK 7 y siguientes)
No, Java lo hace no es compatible con los métodos anidados "directamente". (Sin embargo, la mayoría de los lenguajes funcionales lo hacen, incluidos algunos lenguajes JVM como Scala y Clojure).
Solo como referencia; Usted puede definir clases locales (clases dentro de los métodos) así que esto lo hace compilar
class SubFunction {
private String drawTribleX(){
// *** move trible(t) inside drawTribleX() ***
class Trible {
private String trible(String t){
return t + t + t;
}
}
return new Trible().trible("X");
}
public static void main(String[] args){
SubFunction o = new SubFunction();
System.out.println(o.drawTribleX());
}
}
en cuenta sin embargo que hay algunos restrictions on local classes
3.11.2. Restricciones en clases locales
clases locales están sujetos a las siguientes restricciones:
una clase local sólo es visible dentro del bloque que lo define; nunca puede usarse fuera de ese bloque.
Las clases locales no se pueden declarar como públicas, protegidas, privadas o estáticas. Estos modificadores son para miembros de clases; no están permitidos con declaraciones de variables locales o declaraciones de clases locales.
Al igual que las clases de miembro, y por las mismas razones, las clases locales no pueden contener campos estáticos, métodos o clases. La única excepción es para las constantes que se declaran tanto estáticas como finales.
Las interfaces no se pueden definir localmente.
Una clase local, como una clase miembro, no puede tener el mismo nombre que cualquiera de sus clases adjuntas.
Como se indicó anteriormente, una clase local puede usar las variables locales, los parámetros del método e incluso los parámetros de excepción que están en su alcance, pero solo si esas variables o parámetros se declaran definitivos. Esto se debe a que la duración de una instancia de una clase local puede ser mucho más larga que la ejecución del método en el que se define la clase. Por esta razón, una clase local debe tener una copia interna privada de todas las variables locales que utiliza (estas copias son generadas automáticamente por el compilador).La única forma de garantizar que la variable local y la copia privada sean siempre iguales es insistir en que la variable local es definitiva.
tanto, como se puede ver, su primera opción (sin métodos anidados) es preferible en estas situaciones.
Si hubiera tipeado su ejemplo en un IDE, su compilador ya le habría dicho la respuesta. – Bombe
Posible duplicado de [Funciones anidadas en Java] (http://stackoverflow.com/questions/7367714/nested-functions-in-java) –
@Bombe, en realidad no. Un IDE podría haber determinado si OP podría hacer * exactamente * eso. Si lees con cuidado, habrás notado que la pregunta era "¿Puedo hacer * algo así como * esto?" – aioobe