2016-04-21 7 views
-3

В HelloWorldAnonymousClasses примере программы (from here):Что вызывает метод greet() в HelloWorldAnonymousClasses?

/* 
* Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved. 
* 
* Redistribution and use in source and binary forms, with or without 
* modification, are permitted provided that the following conditions 
* are met: 
* 
* - Redistributions of source code must retain the above copyright 
*  notice, this list of conditions and the following disclaimer. 
* 
* - Redistributions in binary form must reproduce the above copyright 
*  notice, this list of conditions and the following disclaimer in the 
*  documentation and/or other materials provided with the distribution. 
* 
* - Neither the name of Oracle or the names of its 
*  contributors may be used to endorse or promote products derived 
*  from this software without specific prior written permission. 
* 
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS 
* IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR 
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF 
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING 
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
*/ 

public class HelloWorldAnonymousClasses { 

    interface HelloWorld { 
     public void greet(); 
     public void greetSomeone(String someone); 
    } 

    public void sayHello() { 

     class EnglishGreeting implements HelloWorld { 
      String name = "world"; 
      public void greet() { 
       greetSomeone("world"); 
      } 
      public void greetSomeone(String someone) { 
       name = someone; 
       System.out.println("Hello " + name); 
      } 
     } 

     HelloWorld englishGreeting = new EnglishGreeting(); 

     HelloWorld frenchGreeting = new HelloWorld() { 
      String name = "tout le monde"; 
      public void greet() { 
       greetSomeone("tout le monde"); 
      } 
      public void greetSomeone(String someone) { 
       name = someone; 
       System.out.println("Salut " + name); 
      } 
     }; 

     HelloWorld spanishGreeting = new HelloWorld() { 
      String name = "mundo"; 
      public void greet() { 
       greetSomeone("mundo"); 
      } 
      public void greetSomeone(String someone) { 
       name = someone; 
       System.out.println("Hola, " + name); 
      } 
     }; 
     englishGreeting.greet(); 
     frenchGreeting.greetSomeone("Fred"); 
     spanishGreeting.greet(); 
    } 

    public static void main(String... args) { 
     HelloWorldAnonymousClasses myApp = 
      new HelloWorldAnonymousClasses(); 
     myApp.sayHello(); 
    }    
} 

Что вызывает greet() метод englishGreeting объекта? Я запутался ..

EDIT

Спасибо за ваши ответы. Я должен был это заметить! Я пытался решить еще один запрос, который:

В примере программы на https://gist.github.com/bernii/5697073

В коде

this.wait.until(new ExpectedCondition<Boolean>() { 
      public Boolean apply(WebDriver webDriver) { 
       System.out.println("Searching ..."); 
       return webDriver.findElement(By.id("resultStats")) != null; 
      } 
}); 

, что называет применить метод() в анонимном внутреннем классе?

EDIT

Теперь я спросил мой второй запрос в новом вопросе.

+4

Подсказка: найдите 'englishGreeting.greet()' на этой странице. –

+0

Это прямо там до основного метода: / –

ответ

2

В части кода, показанного ниже трех экземпляров интерфейса HelloWorld:

HelloWorld englishGreeting = new EnglishGreeting();   
    HelloWorld frenchGreeting = new HelloWorld() { 
     //... 
    };   
    HelloWorld spanishGreeting = new HelloWorld() { 
     // ... 
    }; 

А вот некоторые методы вызываются на тех случаях:

englishGreeting.greet(); 
    frenchGreeting.greetSomeone("Fred"); 
    spanishGreeting.greet(); 

на французском и испанском языках создаются с помощью анонимного внутреннего класса. Английская версия создается из объявления локального класса (EnglishGreeting). Примечание. Вы не видите объявления локального класса очень часто, это немного интерпретируемый пример.

2

приветсвие() метод объекта englishGreeting вызывается после класса SpanishGreeting

englishGreeting.greet(); 

Обновление: apply- метод вызывается из

WebDriverWait.until()