如何制作以某种方式重复参数方法的java方法?

时间:2014-10-01 18:01:12

标签: java methods parameters

新手在这里运行一个程序,其中许多方法以相同的方式重复,我想知道我是否可以使用不同的方法作为参数为这个模式创建一个方法?

所以基本上为简单起见,假设有些方法需要重复X次我需要这样的东西,除非这不起作用:

public static void repeatThis(void method, int times){
        for (int i = 0, i < times, i++){
            method;
        }
    }

这是一种重复输入方法完全次数的方法。但这并不是有充分理由的。那么我怎么能这样做呢,而参数是指第一种方法应该处理的方法呢?

4 个答案:

答案 0 :(得分:3)

因此,您希望将“代码”作为参数传递给方法。在Java中执行此操作的方法是在调用方法时传递对象。如果您没有要运行的代码的任何参数,也不对任何返回值感兴趣,可以使用Runnable接口。

所以,试试这个:

public static void repeatThis(Runnable runnable, int times) {
    for (int i = 0; i < times; i++) {
        runnable.run();
    }
}

并使用

调用方法
repeatThis(new Runnable() {
    public void run() {
        System.out.println("Your action");
    }
}, 10);

如果您使用 Java 8 ,则可以使用lambdas并按如下方式表达:

repeatThis(() -> System.out.println("Your action"), 10);

答案 1 :(得分:1)

您的方法参数应该是某种接口类型,并且该接口应该有一个方法,例如run()。然后在循环中调用该方法。

示例:

    public static void repeatThis(Runnable method, int times){
        for (int i = 0, i < times, i++){
            method.run();
        }
    }

假设你的方法没有参数并且什么也没有返回。如果不是这种情况,您可以使用包含不同方法的不同接口,以及您需要的参数和返回类型。

要拨打repeatThis,请执行以下操作:

repeatThis (
  new Runnable () {
    public void run() 
    {
        //enter logic to be executed here
    }
  },100);

在Java 8中,您可以使用lambda表达式而不是此匿名类实例。

答案 2 :(得分:1)

有几种方法可以做到这一点。

您可以传入包含该方法的Object,然后在该Object上调用该方法。你必须提前对方法进行硬编码。

或者你可以传入一个包装器,它只有一个函数(称为doFunction()或其他东西),它只是简单地调用了正确的函数。您必须创建Object并传递到repeat()函数。 (使用Runnable的其他答案正在采用这种方法。)

类似地,Java 8闭包执行上述操作而无需使用具体类。

或者你可以使用反射。

答案 3 :(得分:0)

您可以做的最基本的事情是为方法创建一个界面或使用现有的界面,如Runnable

public static void repeatThis(Runnable runnable, int times){
    for (int i = 0, i < times, i++){
        runnable.run();
    }
}

然后调用它:

// Prints "Hi!" 5 times
repeatThis(new Runnable() {
    @Override
    public void run() {
        System.out.println("Hi!");
    }
}, 5);