【问题标题】:Function within a function in Java [duplicate]Java中的函数内的函数[重复]
【发布时间】:2011-08-17 17:57:35
【问题描述】:

是否可以在 Java 中的函数内定义函数?我正在尝试做类似的事情:

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

但我收到错误Illegal start of expression

【问题讨论】:

  • 你想完成什么需要嵌套的方法?
  • function2的代码在我的代码fun1中出现了3次(这是一个匹配股票交易订单的大函数(我的学校作业)),它使用了很多fun​​1的局部变量。
  • 那么有两个非嵌套方法有什么问题?然后只需在 function1 中调用 function2 任意多次
  • @Hunter 如果我在 fun1 之外定义 fun2,那么它将无法修改 fun1 的变量。当我编译它会给出一个找不到符号 的错误
  • @Harsh,只需将您需要的变量作为参数传递给 function2

标签: java


【解决方案1】:

您不能这样做的原因是函数必须是附加到类的方法。与 JavaScript 和类似语言不同,函数不是数据类型。有一种运动将它们合二为一,以支持 Java 中的闭包(希望在 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】:

    你不能(在 Java 中它们被称为方法)。

    但是,您可以在方法内部定义一个匿名类,然后调用它的方法。

    【讨论】:

    • 在我看来,方法和函数之间是有区别的,而函数本身存在,方法与类或对象相关。
    • 这个说明很有用,因为所有 java 文档都使用这个概念。 Harsh(或其他任何人)将通过正确的命名更轻松地找到有关方法的未来问题的答案。
    • 他可以,但不能在staticstackoverflow.com/questions/5388584/…
    • @YoushaAleayoub - 谢谢,这个答案是在 Java 8 之前给出的,现在我们得到了 lambdas :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-21
    • 2011-03-22
    相关资源
    最近更新 更多