2013-01-05 41 views
5

Tôi đang làm việc trong Selenium, và câu hỏi này cụ thể hơn với Java chứ không phải là Selenium.Điều này thực sự là gì trong Java?

Ví dụ tôi đang cung cấp là Selenium WebDriver ExplicitWait,

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

Những gì ông được chính xác Làm? Làm thế nào anh ta viết Logic mà không gán một tham chiếu đến một đối tượng cho lớp ExpectedCondition ???

Cảm ơn.

Trả lời

8

Điều đang xảy ra ở đây là tạo ra một anonymous class được kế thừa từ ExpectedCondition. Trong cơ thể của lớp này, anh ta sẽ ghi đè phương thức apply(...).

+0

Cảm ơn, rõ ràng ngay bây giờ :) – Fazy

2

Đó là số anonymous class kéo dài 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 
); 
1

Đây là lớp bên trong ẩn danh. dạng tổng quát là:

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

Nó định nghĩa một lớp mới không có tên (*) mà mở rộng hoặc thực hiện các lớp có tên hoặc giao diện và bao gồm các phương pháp overriden (s) trong định nghĩa lớp mới. Định nghĩa được sử dụng chỉ cho một phần tử được tạo ra.

(*) Được rồi, nó thực sự có tên, như lớp ngoài $ 12, nhưng bạn không phải dựa vào đó là giống nhau từ biên dịch để biên dịch. Nếu bạn cần một tên lớp, đây là cú pháp sai để sử dụng.

Các vấn đề liên quan