使用函数式编程用单一方法替换多个方法
Replacing multiple methods with single methods using functional programming
我有一个包含这样例程的代码(实际代码库非常广泛,但我提供了一个最小版本来解释它)
class TestClass {
void anotherRoutine2(){
//some code logic
}
void someOtherRoutine2(){
//some code logic
}
void method1() {
routine1();
anotherRoutine2();
routine3();
}
void method2() {
routine1();
someOtherRoutine2();
routine3();
}
public static void main(String[] args) {
TestClass object1 = new TestClass();
object1.method1();
object1.method2();
}
}
所以我们可以看到 method1 和 method2 的唯一区别是 method1 调用了 anotherRoutine2 而 method2 调用了 someOtherRoutine2。
我正在尝试在这种情况下使用函数式编程,因此我想组合 method1 和 method2,以便将更改的例程作为参数传递。所以我打算做以下事情
class TestClass {
void anotherRoutine2(){
//some code logic
}
void someOtherRoutine2(){
//some code logic
}
void newMethod(Runnable methodName) {
routine1();
methodName.run();
routine3();
}
public static void main(String[] args) {
TestClass object1 = new TestClass();
object1.method1(()->object1.anotherRoutine2());
object1.method2(()->object1.someOtherRoutine2());
}
}
有没有更好的方法解决这个问题?
docs 建议制作 class implements runnable
。
class TestClass {
class anotherRoutine2 implements runnable{
void run(){
//some code logic
}
}
void someOtherRoutine2 implements runnable{
void run(){
//some code logic
}
}
void newMethod(Runnable methodName) {
routine1();
methodName.run();
routine3();
}
public static void main(String[] args) {
TestClass object1 = new TestClass();
object1.newMethod(new object1.anotherRoutine2());
object1.newMethod(new object1.someOtherRoutine2());
}
}
你有一些错别字(应该是 newMethod
),但你可以这样做。或者使用方法参考如下:
TestClass object1 = new TestClass();
object1.newMethod(object1::anotherRoutine2);
object1.newMethod(object1::someOtherRoutine2);
我有一个包含这样例程的代码(实际代码库非常广泛,但我提供了一个最小版本来解释它)
class TestClass {
void anotherRoutine2(){
//some code logic
}
void someOtherRoutine2(){
//some code logic
}
void method1() {
routine1();
anotherRoutine2();
routine3();
}
void method2() {
routine1();
someOtherRoutine2();
routine3();
}
public static void main(String[] args) {
TestClass object1 = new TestClass();
object1.method1();
object1.method2();
}
}
所以我们可以看到 method1 和 method2 的唯一区别是 method1 调用了 anotherRoutine2 而 method2 调用了 someOtherRoutine2。
我正在尝试在这种情况下使用函数式编程,因此我想组合 method1 和 method2,以便将更改的例程作为参数传递。所以我打算做以下事情
class TestClass {
void anotherRoutine2(){
//some code logic
}
void someOtherRoutine2(){
//some code logic
}
void newMethod(Runnable methodName) {
routine1();
methodName.run();
routine3();
}
public static void main(String[] args) {
TestClass object1 = new TestClass();
object1.method1(()->object1.anotherRoutine2());
object1.method2(()->object1.someOtherRoutine2());
}
}
有没有更好的方法解决这个问题?
docs 建议制作 class implements runnable
。
class TestClass {
class anotherRoutine2 implements runnable{
void run(){
//some code logic
}
}
void someOtherRoutine2 implements runnable{
void run(){
//some code logic
}
}
void newMethod(Runnable methodName) {
routine1();
methodName.run();
routine3();
}
public static void main(String[] args) {
TestClass object1 = new TestClass();
object1.newMethod(new object1.anotherRoutine2());
object1.newMethod(new object1.someOtherRoutine2());
}
}
你有一些错别字(应该是 newMethod
),但你可以这样做。或者使用方法参考如下:
TestClass object1 = new TestClass();
object1.newMethod(object1::anotherRoutine2);
object1.newMethod(object1::someOtherRoutine2);