是否可以在方法内创建方法?

时间:2014-08-14 12:50:03

标签: java methods

我想创造另一种方法,但我无法取得成功。 这甚至可能吗?

    public void a() {
            System.out.println(...);
            public void b(){//This is the method that i want to create.
                System.out.println(...);
            }
        }

5 个答案:

答案 0 :(得分:2)

您无法在方法内创建方法。

您可以在方法中定义一个匿名内部类,然后有一个方法,您也可以在您的示例中执行该方法。

答案 1 :(得分:0)

您可能错过}的结束check2。并且您无法创建嵌套方法:

 public void check2() {
    label_11.setText(textField.getText());
    textField.setText("");
    System.out.println("Done 2");
 } //<--- You need to close this method
    public void check22(){//this is the method that i want to create.
        if (i2 == 590) {
        i2 = 600;
        Timer timer = new Timer();
        timer = new Timer(false);
        timer.schedule(new TimerTask() {
            // You cannot create nested methods, so this isn't valid either:
            @Override
            public void run() {
                i2--;
                label_1.setText(Integer.toString(i2));
                if (i2 == 590) {
                    this.cancel();
                }
            }
        }, 0, 1000);
      }else{

      }
    }

}

答案 2 :(得分:0)

为了安全起见,您无法在方法中声明方法。您可以在方法中声明anonymous classanonymous class可以传递您需要实例化的方法的实现。

您的原始方法缺少}。您不能以这种方式在方法内部声明方法。

这里的另一个选择是查看命令模式。例如:

public interface Command { 
    public void execute();
}

然后您可以创建类,如下所示:

public class HelloCommand implements Command {
    public void execute() {
        System.out.println("Hello!");
    }
}

现在,您可以访问一个类,它可以像方法一样调用

Command hello = new HelloCommand();

hello.execute(); // prints "Hello!"

答案 3 :(得分:0)

您需要的是Closure,这在所有动态语言中都是众所周知的。在Java 8中lambdas可以用于这种情况,在Java 7中 - anonymous inner class

答案 4 :(得分:0)

Java&gt;版本8不支持“直接”嵌套方法。

所以你应该创建两个这样的单独方法。

public class test {

    public void check2() {
        label_11.setText(textField.getText());
        textField.setText("");
        System.out.println("Done 2");

    }

    public void check22() {// this is the method that i want to create.
        if (i2 == 590) {
            i2 = 600;
            Timer timer = new Timer();
            timer = new Timer(false);
            timer.schedule(new TimerTask() {
                @Override
                public void run() {
                    i2--;
                    label_1.setText(Integer.toString(i2));
                    if (i2 == 590) {
                        this.cancel();
                    }
                }
            }, 0, 1000);
        } else {

        }
    }

}

如果它确实是必要的,那么为了拥有本地方法,切换到Java 8并使用Lambdas或在方法中定义一个匿名内部类,如下所示:

public class test {

    public void check2() {
        label_11.setText(textField.getText());
        textField.setText("");
        System.out.println("Done 2");

        class localclass {

            public void check22() {// this is the method that i want to create.
                if (i2 == 590) {
                    i2 = 600;
                    Timer timer = new Timer();
                    timer = new Timer(false);
                    timer.schedule(new TimerTask() {
                        @Override
                        public void run() {
                            i2--;
                            label_1.setText(Integer.toString(i2));
                            if (i2 == 590) {
                                this.cancel();
                            }
                        }
                    }, 0, 1000);
                } else {

                }
            }

        }
    }
}