简体   繁体   English

什么调用 HelloWorldAnonymousClasses 中的 greet() 方法?

[英]What calls the greet() method in HelloWorldAnonymousClasses?

In the HelloWorldAnonymousClasses example program ( from here ):在 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();
    }            
}

What calls the greet() method of the englishGreeting object?什么调用了englishGreeting对象的greet()方法? I'm confused..我糊涂了..

EDIT编辑

Thanks for your replies.感谢您的回复。 I should have spotted that!我应该发现了! I was trying to solve another query, which is:我试图解决另一个查询,即:

In the example program on https://gist.github.com/bernii/5697073https://gist.github.com/bernii/5697073上的示例程序中

In the code在代码中

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

what calls the apply() method in the anonymous inner class?匿名内部类中的apply()方法是怎么调用的?

EDIT编辑

I have now asked my second query in a new Question.我现在在一个新问题中问了我的第二个查询。

The greet() method of the englishGreeting object is called after the SpanishGreeting class englishGreeting 对象的greet() 方法在SpanishGreeting 类之后调用

englishGreeting.greet();

Update: The apply- Method is called from更新: apply- 方法是从

WebDriverWait.until() 

In the part of the code shown below three instances of the HelloWorld interface are created:在下面显示的代码部分中,创建了 HelloWorld 接口的三个实例:

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

And here some methods are called on those instances:在这些实例上调用了一些方法:

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

The french and spanish versions are created using an anonymous inner class.法语和西班牙语版本是使用匿名内部类创建的。 The english version is created from a local class declaration (EnglishGreeting).英文版本是根据本地类声明 (EnglishGreeting) 创建的。 Note: you don't see local class declarations very often, it's a bit of a construed example.注意:您不会经常看到本地类声明,这是一个有点解释的示例。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM