将语句传递给方法

时间:2016-06-20 20:39:58

标签: java

我知道如何将参数传递给方法 - 您将类/原语名称放在方法头中,并在调用所述方法时替换该类型的值。是否可以将一系列语句传递给方法(在java中),类似于传入变量的方式?例如,如:

repeat(5) {
    System.out.println("Hello");
}
...
private void repeat(int arg, {} statements) {
    for (int x = 0; x < arg; x++) {
        statements;
    }
}

这里所需的输出是打印出来&#34;你好&#34; 5次。

显然语法不正确,但这有可能吗?

4 个答案:

答案 0 :(得分:4)

传递一个具有执行该系列语句的函数的对象。

答案 1 :(得分:2)

使用包含要运行的语句的方法传递对象。

一种简单的方法是使用匿名类实现Runnable接口。

private void repeat(int times, Runnable action) {
    for (int x = 0; x < times; x++) {
        action.run();
    }
}

...

repeat(5, new Runnable(){
    void run(){
        System.out.println("Hello");
    }
});

答案 2 :(得分:1)

您可以创建具有标准化方法的界面。比如说“Lambda”界面。那么该接口将有一个名为act()的方法。

public interface Lambda{
    public void act();
}

现在,当你想要这样做时,你可以拥有一个名为repeat

的函数
public static void repeat(int x, Lambda lambda){
    for(int y = 0;y<x;y++){
        lambda.act();
    {
}

你可以这样称呼

public static void main(String args[]){
    repeat(5, new Lambda(){
           @Override
           public void act(){
                System.out.println("hello");
           });
}

基本上你在这里做的事情被称为通过使用孩子来覆盖父母的方法。 new Lambda()行创建了Lambda接口的新匿名子项 - See what anonymouse Classes are here

答案 3 :(得分:1)

您有几种选择。使用Java 8,您只需传入一个界面:

公共课测试{

public interface MyStatements {
    //one argument if needed
    public void execute(int arg1);
}

public static void main(String args[]) {
    // lambda
    MyStatements statements = a -> System.out.println(a);
    repeat(20, statements);

}

private static void repeat(int arg, MyStatements statements) {
    for (int x = 0; x < arg; x++) {
        statements.execute(x);
    }
}

}

您也可以在Groovy中执行此操作

private static void repeat(int arg, Closure closure) {
    for (int x = 0; x < arg; x++) {
        closure(x)
    }
}

repeat(20, {myInt -> println(myInt)})