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
}