我只是对lambdas.I有一个小小的疑问,我用下面的code.If得到了下面的错误,我调用了一个返回布尔值或其他类型的方法,我看不出这个issue.How --我能解决这个问题吗?
错误:
线程“java.lang.Error”中的异常:未解决的编译问题: Iterable类型中的方法forEach(使用者)不适用于参数(( bean) -> {})该表达式的目标类型必须是一个函数接口 在com.wipro.MethodReference.main(MethodReference.java:18)
package com.sample;
import com.student.MockClass;
import java.util.ArrayList;
import java.util.List;
public class MethodReference {
public static void main(String[] args) {
MockClass obj = new MockClass("JSP", 2);
MockClass obj1 = new MockClass("Java", 8);
List<MockClass> listofBeans = new ArrayList<MockClass>();
listofBeans.add(obj);
listofBeans.add(obj1);
listofBeans.forEach(bean -> MethodReference::call);
}
public static void call(){
System.out.println("Hii!!!");
}
}发布于 2017-04-01 04:30:15
函数接口(在本例中是Consumer)的目的是通过流传递数据。您的方法call()没有多大意义,因为它不接受任何参数,也不返回任何参数。您可以这样做,但不能使用方法引用。
试一试:
listofBeans.forEach(MethodReference::call);
public static void call(MockClass bean){...}或
listofBeans.forEach(bean -> call());发布于 2017-04-01 06:18:08
JLS描述了方法引用表达式:
如果T是函数接口类型(§9.8),则方法引用表达式在赋值上下文、调用上下文或转换上下文中与目标类型T兼容(§9.8),且表达式与从T派生的地面目标类型的函数类型一致。
因此,您必须将其赋值/转换为函数接口。
listofBeans.forEach(bean-> ((Runnable)MethodReference::call).run());相当于:
listofBeans.forEach(bean-> call());https://stackoverflow.com/questions/43152763
复制相似问题