将方法作为参数传递给Java中的另一种方法

时间:2020-04-09 00:59:19

标签: java android

我有3个方法执行相同的操作,但最后这3个方法称为diff方法。因此,我想拥有一个方法,而不是使用3个方法,它将接受一个方法作为参数,并在最后调用该方法

我该怎么做,我尝试看一下不起作用的java反射,不确定接口是否是正确的方法。

请建议 谢谢 R

class A {

doSameThingA(int x) {
 //do same thing with x
 methodA()
}
doSameThingB(int x) {
 //do same thing with x
 methodB()
}

doSameThingC(int x) {
 //do same thing with x
 methodC()
}

//I WANT TO WRITE A SINGLE FUNCTION replacing the above three
doSameThing(int x, Method method) {
//do same thing with x
method()
}
} 

2 个答案:

答案 0 :(得分:1)

Java中存在一个运算符,称为双冒号运算符。它也称为方法引用运算符,因为它引用方法,并且我相信此功能将使您可以通过参数化方法来解决问题。有点像lambda。

class A {
    public static void main(String... args) {
        new A().doSameThing(1, MethodClass::printSomething);
    }

    void doSameThing(int x, Runnable method) {
        method.run();
    }
} 

class MethodClass {
    public static void printSomething() {
        System.out.println("Hello World");
    }
}

以上是一个示例。 MethodClass包含要运行的方法(例如methodA(),methodB(),methodC()等。doSameThing方法采用Runnable,这是一个不带参数且不返回任何值的功能接口)。通过传递不带参数且不返回值的printSomething方法,我们可以在doSameThing方法中运行该方法。

当然,您使用的功能接口的类型取决于设计方法的目的。

此外,如果您的其他方法(methodA(),methodB(),...)未在代码中的其他任何地方使用,则可以使用匿名类在适当位置实现可运行接口。下面是使用该格式编写的先前示例:

class A {
    public static void main(String... args) {
        new A().doSameThing(1, new Runnable() {
            public void run() {
                System.out.println("Hello World");
            }
        });
    }
    void doSameThing(int x, Runnable method) {
        method.run();
    }
}

由于Runnable是一个功能性的接口,您甚至可以为此使用lambda表达式。

class A {
    public static void main(String... args) {
        new A().doSameThing(1, () -> {    
            System.out.println("Hello World");
        });
    }
    void doSameThing(int x, Runnable method) {
        method.run();
    }
}

答案 1 :(得分:0)

如果可以使用Java 1.8(及更高版本),则可以将该方法作为函数传递

Function<Integer> method = (x) -> { //do something here }

在doSameThing中

doSameThing(int x, Function<Integer> fn) {
   fn.apply(x)
}