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

如何制作一个以某种方式重复参数方法的java方法?,java,methods,parameters,Java,Methods,Parameters,这里的新手正在使用一个程序,其中许多方法以某种相同的方式重复,我想知道我是否可以用不同的方法作为参数为这个模式创建一个方法 所以基本上为了简单起见,让我们假设一些方法需要重复X次,我需要这样的东西,除了这不起作用: public static void repeatThis(void method, int times){ for (int i = 0, i < times, i++){ method; } } 公共静态vo

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

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

public static void repeatThis(void method, int times){
        for (int i = 0, i < times, i++){
            method;
        }
    }
公共静态void repeatThis(void方法,int次){
对于(int i=0,i

这是一种重复输入方法的方法,精确地重复次数。但这不起作用有很好的理由。那么,如果参数指的是第一个方法应该处理的方法,那么我该怎么做呢?

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

例如:

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

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

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

例如:

    public static void repeatThis(Runnable method, int times){
        for (int i = 0, i < times, i++){
            method.run();
        }
    }
在Java 8中,您可以使用lambda表达式而不是这个匿名类实例。

因此您希望将“code”作为参数传递给方法。在Java中实现这一点的方法是在调用方法的同时传递一个对象。如果您对要运行的代码没有任何参数,或者对任何返回值都不感兴趣,那么可以使用该接口进行此操作

那么,试试这个:

public static void repeatThis(Runnable runnable, int times) {
    for (int i = 0; i < times; i++) {
        runnable.run();
    }
}
如果您使用的是Java8,则可以使用lambdas并将其表示为:

repeatThis(() -> System.out.println("Your action"), 10);
因此,您希望将“代码”作为参数传递给方法。在Java中实现这一点的方法是在调用方法的同时传递一个对象。如果您对要运行的代码没有任何参数,或者对任何返回值都不感兴趣,那么可以使用该接口进行此操作

那么,试试这个:

public static void repeatThis(Runnable runnable, int times) {
    for (int i = 0; i < times; i++) {
        runnable.run();
    }
}
如果您使用的是Java8,则可以使用lambdas并将其表示为:

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

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

您可以只传入包含该方法的对象,然后对该对象调用该方法。不过,您必须提前硬编码该方法

或者您可以传入一个包装器对象,该对象有一个函数(称为doFunction()或其他函数),该函数只调用正确的函数。您必须创建对象并传递到repeat()函数中。(使用Runnable的其他答案采用这种方法)

类似地,Java8闭包不必使用具体的类就可以完成上述任务


或者你可以使用反射。

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

您可以只传入包含该方法的对象,然后对该对象调用该方法。不过,您必须提前硬编码该方法

或者您可以传入一个包装器对象,该对象有一个函数(称为doFunction()或其他函数),该函数只调用正确的函数。您必须创建对象并传递到repeat()函数中。(使用Runnable的其他答案采用这种方法)

类似地,Java8闭包不必使用具体的类就可以完成上述任务


或者您可以使用反射。

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


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


我个人只会保持循环。它们短而透明。将调用分解为函数可能适用于最简单的情况,但一旦您需要将不同的参数传递给不同的调用,或查看返回值等,它就会变得非常棘手。@NPE他不是在问如何摆脱循环。他在问如何以编程方式传入一个方法。@KevinWorkman:这不是我理解意图的方式。@NPE我理解。我只是觉得你读错了:p@KevinWorkman:让我们同意在这个问题上有分歧。:-)我个人只会保持循环。它们短而透明。将调用分解为函数可能适用于最简单的情况,但一旦您需要将不同的参数传递给不同的调用,或查看返回值等,它就会变得非常棘手。@NPE他不是在问如何摆脱循环。他在问如何以编程方式传入一个方法。@KevinWorkman:这不是我理解意图的方式。@NPE我理解。我只是觉得你读错了:p@KevinWorkman:让我们同意在这个问题上有分歧。:-)(+1)用于Java8语法。真的是这样。然后我们有了更多的共同点,而不仅仅是我们的用户名;-)(+1)用于Java8语法。真的是这样。然后我们有了更多的共同点,而不仅仅是我们的用户名;-)
// Prints "Hi!" 5 times
repeatThis(new Runnable() {
    @Override
    public void run() {
        System.out.println("Hi!");
    }
}, 5);