我想创造另一种方法,但我无法取得成功。 这甚至可能吗?
public void a() {
System.out.println(...);
public void b(){//This is the method that i want to create.
System.out.println(...);
}
}
答案 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 class
,anonymous 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 {
}
}
}
}
}