我無法理解這段代碼,他們是否定義了一個方法內的構造函數?我理解一個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 –