我无法理解这段代码,他们是否定义了一个方法内的构造函数?我理解一个WebElement对象正在返回,但是java中的这种编码概念是什么。了解下面的代码
WebElement foo = wait.until(new Function() {
public WebElement apply(WebDriver driver) {
return driver.findElement(By.id("foo"));
}
});
我无法理解这段代码,他们是否定义了一个方法内的构造函数?我理解一个WebElement对象正在返回,但是java中的这种编码概念是什么。了解下面的代码
WebElement foo = wait.until(new Function() {
public WebElement apply(WebDriver driver) {
return driver.findElement(By.id("foo"));
}
});
它不创建构造函数。相反,它会创建一个与Function
兼容的类型。它为什么这样做? Function
是一个接口或抽象类(我真的不知道,编辑我的答案)这意味着,它没有一个构造函数/它的构造函数不能被调用。所以你怎么写
new Function()
?
这是花括号中的东西进来的地方。Function
有一个名为apply
的方法,它没有实现(抽象)。这也是你不能构造抽象类和接口的原因。因此,现在在花括号中,您在一个匿名类中实现了apply
方法,该类延伸了Function
/implements Function
(取决于Function
是接口还是抽象类)。但是Java为你做了所有这些,所以你不必担心。上述评论中的链接非常好。你可以在那里了解更多。
首先,
WebDriverWait wait = new WebDriverWait();
WebDriverWait.util从FluentWait延伸,这样
public <V> V until(Function<? super T, V> isTrue)
这样定义的,现在你知道你必须通过一个函数类型,直到。但函数只是一个接口,它有一个未实现的方法'应用',所以你必须实现它,然后你可以使用匿名类。
其实,如果你使用硒webdriver的这种模式,以下是通用
ExpectedCondition ec = new ExpectedCondition<WebElement>() {
public WebElement apply(WebDriver d) {
return d.findElement(By.id("cutome"));
}
};
ExpectedCondition一个好办法:public interface ExpectedCondition<T> extends Function<WebDriver, T> {}
其呼叫使得一个匿名类 –
看看https://开头的文档.oracle.com/JavaSE的/教程/ JAVA/javaOO/anonymousclasses.html –