java中的方法可以嵌套,效果如何?

Dav*_*vid 25 java methods

例如,这是合法的:

class NAME {
method {
     method {} 
}
} 
Run Code Online (Sandbox Code Playgroud)

效果会是什么?是否涉及任何特定的语法?

Osc*_*Ryz 43

更新 由于Java 8方法可以使用lambdas嵌套,请参阅另一个问题.

此答案适用于Java 8之前的Java版本

原答案如下:

java中的方法可以嵌套[...]吗?

不,那是不可能的.

你能得到的最接近的是:

class Name {
    void methodOne() {
        class InnerClass {
           void methodTwo() {
           }
         }
     }
 }
Run Code Online (Sandbox Code Playgroud)

也就是说,在方法中定义的内部类中定义的第二种方法.

您可以在内部类中声明方法static,因此您不必调用 new

  • 是的,这是旧的和封闭的但是为了读者的缘故,你不能在内部类中声明静态成员,因为它们需要外部类的实例.你无法避免新的运营商. (2认同)

SLa*_*aks 13

那是无效的语法; 没有这样的功能支持.(虽然它正在考虑用于Java 7)

相反,您可以使用刚刚询问过的嵌套类.


Nei*_*fey 5

没有.

一种解决方案就是将您想要调用的方法声明为"父"方法之外的私有方法 - 如果您真的很烦,可以使用一些命名约定来表明它们"属于""父"方法.

您可以考虑的另一件事 - 在程序员中似乎并不广为人知 - 是您可以声明任意范围块并对其进行标记,然后使用break来突破该块.

所以以下是完全合法的Java:

void method() {
      myInnerMethod : {
        // do some stuff

        if (condition) {
            break myInnerMethod;
        }

        // do some more stuff
      }
}
Run Code Online (Sandbox Code Playgroud)

当然,范围块实际上不是一种方法,但在某些情况下,它可以用来做你想要的"内部方法".

  • +1,我从来不知道,但我只是验证了它......我猜你不能调用块,但如上所述你可以跳转到它。(不确定此功能的用途是什么,TBH。) (2认同)