我有一段使用lambda的代码,但是出现了错误:
"lambda转换的目标类型必须是一个接口"
有人能帮忙吗?我的代码如下:
private By optStarGrade = (strStar) -> { By.xpath("//input[@id='" + strStar + "'"); };
By
是一个类,不能用作lambda表达式的目标类型。
只有具有SAM(Single Abstract Method)的接口可以用作lambda表达式的目标类型。
如果您真的想使用lambda,则使用Consumer<String>
:
private Consumer<String> optStarGrade = (strStar) -> {By.xpath("//input[@id='" + strStar + "'");};
如果你不想忽略从 By.xpath
返回的值,那么请使用 Function<String, By>
。
private Function<String, By> optStarGrade = (strStar) -> By.xpath("//input[@id='" + strStar + "'");
为了简化您可能正在尝试的内容并更好地关联它,您可以将当前代码表示为一个方法。该方法试图查找类型为 By
的 optStarGrade
,以获取给定的 strStar
,该子部分是您的 XPath
的一部分,可能如下所示:
public static By optStarGradeFunction(String strStar) {
return By.xpath("//input[@id='" + strStar + "'");
}
By
如下:By optStarGrade = findByXPath("XPath");
该方法(也称为函数)的类似表示如下:
Function<String, By> optStarGradeFunction = new Function<String, By>() {
@Override
public By apply(String strStar) {
return By.xpath("//input[@id='" + strStar + "'");
}
};
By optStarGrade = optStarGradeFunction.apply("XPath"); // calls the above 'apply' method
然后,Function
可以使用 lambda 表示为:
Function<String, By> optStarGradeFunction = strStar -> By.xpath("//input[@id='" + strStar + "'");