这是我的代码.
public class SubFunction {
private String drawTribleX(){
return trible("X");
}
private String trible(String t){
return t + t + t;
}
public static void main(String[] args){
SubFunction o = new SubFunction();
System.out.println(o.drawTribleX());
}
}
Run Code Online (Sandbox Code Playgroud)
我可以这样做吗?
public class SubFunction {
private String drawTribleX(){
// *** move trible(t) inside drawTribleX() ***
private String trible(String t){
return t + t + t;
}
return trible("X");
}
public static void main(String[] args){
SubFunction o = new SubFunction();
System.out.println(o.drawTribleX());
}
}
Run Code Online (Sandbox Code Playgroud)
谢谢.
aio*_*obe 112
更新2014-02-09:
JDK 8引入了lambdas(匿名函数表达式),允许您像这样解决它:
Function<String, String> trible = s -> s+s+s;
System.out.println(trible.apply("X")); // prints XXX
Run Code Online (Sandbox Code Playgroud)
(JDK 7及以下)
不,Java不支持"直接"嵌套方法.(大多数函数式语言都可以,包括一些JVM语言,如Scala和Clojure!)
仅供参考; 您可以定义本地类(方法中的类),这样就可以编译
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());
}
}
Run Code Online (Sandbox Code Playgroud)
3.11.2.本地类的限制
本地课程受以下限制:
本地类仅在定义它的块中可见; 永远不能在那个街区之外使用它.
本地类不能声明为public,protected,private或static.这些修饰符适用于类的成员; 它们不允许使用局部变量声明或本地类声明.
与成员类一样,出于同样的原因,本地类不能包含静态字段,方法或类.唯一的例外是声明为static和final的常量.
接口不能在本地定义.
本地类(如成员类)不能与其任何封闭类具有相同的名称.
如前所述,本地类可以使用局部变量,方法参数,甚至是其范围内的异常参数,但前提是这些变量或参数是最终的.这是因为本地类实例的生命周期可能比定义类的方法的执行时间长得多.因此,本地类必须具有它使用的所有局部变量的私有内部副本(这些副本由编译器自动生成).确保局部变量和私有副本始终相同的唯一方法是坚持局部变量是最终的.
因此,正如您所看到的,在这些情况下,您的第一个选项(没有嵌套方法)更可取.
很简单 - 没有.您不能将方法嵌套在另一个方法中.
如果你真的想这样做,你可以在方法中定义类(奇怪的是,给定先前的限制),因此可以将方法包装在外部方法中的类中.
然而,这不是非常惯用的,并且通常的做法似乎是拥有一个私有方法列表(在顶级类中),可能根据目的分组,并使用注释块划分组.
但是,如果您碰巧发现自己正在使用Scala,那么您可以将方法嵌入到您内心的内容中......