6

我在 Selenium 工作,这个问题更具体到 Java 而不是 Selenium。

我提供的示例是 Selenium WebDriver ExplicitWait,

new ExpectedCondition<WebElement>(){
        @Override
        public WebElement apply(WebDriver d) 
        {
            return d.findElement(By.id("myDynamicElement"));
        }});

他到底在做什么?他是如何在没有将对象引用分配给 ExpectedCondition 类的情况下编写逻辑的?

谢谢。

4

3 回答 3

9

这里发生的是创建一个继承ExpectedCondition. 然后在这个类的主体中,他覆盖了方法apply(...)

于 2013-01-05T07:01:30.523 回答
3

那是一个扩展的匿名类ExpectedCondition

Collections.sort (aList, 
new Comparator () { // implements the IF 
public int compare (ObjectType o1, ObjectType o2 ) throws ..{ 
.... implementation for compare() 
} // end of compare() 
} // end of Comparator implementation
);
于 2013-01-05T07:04:22.847 回答
1

这是一个匿名内部类。一般形式是:

class OuterClass {
  void method() {
    MyInterfaceOrClass innerClass = new MyInterfaceOrClass() {
      @Override
      public void methodToOverride() {
          /* code */
      }
    };
  }
 }

它定义了一个没有名称(*)的新类,该类扩展或实现了命名类或接口,并在新类定义中包含了覆盖的方法。该定义仅用于正在创建的一个元素。

(*) 好吧,它确实有一个名字,比如 Outerclass$12,但你不应该依赖它在编译之间是一样的。如果你需要一个类名,这是错误的语法。

于 2013-01-05T07:05:49.207 回答