2015-09-01 107 views
-3

我無法理解這段代碼,他們是否定義了一個方法內的構造函數?我理解一個WebElement對象正在返回,但是java中的這種編碼概念是什麼。瞭解下面的代碼

WebElement foo = wait.until(new Function() { 

    public WebElement apply(WebDriver driver) { 

     return driver.findElement(By.id("foo")); 

    } 

}); 
+0

其呼叫使得一個匿名類 –

+2

看看https://開頭的文檔.oracle.com/JavaSE的/教程/ JAVA/javaOO/anonymousclasses.html –

回答

0

它不創建構造函數。相反,它會創建一個與Function兼容的類型。它爲什麼這樣做? Function是一個接口或抽象類(我真的不知道,編輯我的答案)這意味着,它沒有一個構造函數/它的構造函數不能被調用。所以你怎麼寫

new Function() 

這是花括號中的東西進來的地方。Function有一個名爲apply的方法,它沒有實現(抽象)。這也是你不能構造抽象類和接口的原因。因此,現在在花括號中,您在一個匿名類中實現了apply方法,該類延伸了Function/implements Function(取決於Function是接口還是抽象類)。但是Java爲你做了所有這些,所以你不必擔心。上述評論中的鏈接非常好。你可以在那裏瞭解更多。

1

首先,

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> {}