Java 8如何将非函数方法作为参数传递

Java 8如何将非函数方法作为参数传递,java,lambda,java-8,Java,Lambda,Java 8,我有一个包含多个方法的类: Class SimpleClass { methodA(var1, var2) { //body } methodB(var1, var2) { //body } .... } 使用Java8Lambda,我可以将上述方法之一作为参数发送到其他类的另一个函数中吗?如下所示: Class Service { doService(Method arg) { //Invoke passed

我有一个包含多个方法的类:

Class SimpleClass {
    methodA(var1, var2) {
      //body
    }

    methodB(var1, var2) {
      //body
    }
    ....
}

使用Java8Lambda,我可以将上述方法之一作为参数发送到其他类的另一个函数中吗?如下所示:

Class Service {
   doService(Method arg) {
     //Invoke passed simple class method here
     arg()
   }

}
完全有效的示例

import java.util.function.BiConsumer;
class SimpleClass {
    void methodA(String a, String b) {
        System.out.printf("%s %s", a, b);
    }
}
class Service {
    void doService(BiConsumer<String,String> method) {
        method.accept("Hola", "mundo");
    }
}
class Main {
    public static void main( String ... args ) { 
        SimpleClass sc = new SimpleClass();
        Service s = new Service();
        s.doService(sc::methodA);
    }
}
但目前我们必须使用这些功能接口


如果
doService
具有适当的签名,您可以写:

service.doService(mySimpleClass::methodA);
完整示例:

class SimpleClass {
  public void methodA(String a, String b) {
    System.out.println(a + b);
  }
  //other methods
}

class Service {
  public void doService(BiConsumer<String, String> consumer) {
    consumer.accept("Hel", "lo");
  }
}

public static void main(String[] args) {
  SimpleClass sc = new SimpleClass();
  new Service().doService(sc::methodA); //prints Hello
}
类SimpleClass{
公共void方法a(字符串a、字符串b){
系统输出打印项次(a+b);
}
//其他方法
}
班级服务{
公共无效数据服务(双消费者消费者){
消费者。接受(“Hel”、“lo”);
}
}
公共静态void main(字符串[]args){
SimpleClass sc=新SimpleClass();
新服务().doService(sc::methodA);//打印Hello
}

是否存在
SimpleClass
的实例?还是这些方法是静态的?这个链接的问题早在Java 8之前就被问到了,但后来就用“Java 8方式”来做了,这实际上是关于这个问题的标准问题。doService的签名是什么?@bhspencer更新了example@OscarRyz:谢谢回复。我还可以将SimpleClass的集合传递给服务,并在服务中迭代SimpleClass对象的集合&调用SimpleClass的方法之一。现在,我不能这样做,因为simple类中的方法是实例方法。@surajbahl是的,您可以这样做,如果事情变得太复杂,您最好使用常规方法调用:
for(Item i:aCollection){i.methodX();}
集合中的所有项目都是特定类的实例/interface@OscarRyz字体你能给我一个小片段来做吗?我不能直接调用方法,因为可以调用不同的方法。例如,一个调用方可以要求调用集合的每个对象上的methodA,而另一个调用方可以要求调用methodB
class SimpleClass {
  public void methodA(String a, String b) {
    System.out.println(a + b);
  }
  //other methods
}

class Service {
  public void doService(BiConsumer<String, String> consumer) {
    consumer.accept("Hel", "lo");
  }
}

public static void main(String[] args) {
  SimpleClass sc = new SimpleClass();
  new Service().doService(sc::methodA); //prints Hello
}