我有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()
}
}
答案 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)
}