java - Java中匿名类的方法

标签 java polymorphism anonymous-class

有没有办法捕获匿名类的类型?

在下面的例子中,我如何调用匿名类的方法g2?无法想到它绝对有用的具体情况。我知道匿名类是供“即时”使用的。然而,想知道。

如果我无法调用它,那么能够在匿名类中定义它(如果有的话——除了作为匿名类本身的其他方法的帮助者)有什么用?

// http://docs.oracle.com/javase/tutorial/java/javaOO/anonymousclasses.html

public class SomeClass {

    abstract class HelloWorld {  abstract public void greet();  }

    public void sayHello() {        
        class EnglishGreeting extends HelloWorld {  //  local class 
            String name = "world";
            public void greet() {  System.out.println("Heya " );    }
            public void gg() { System.out.println("do this as well.. ");}  }  
        HelloWorld englishGreeting = new EnglishGreeting();

        HelloWorld frenchGreeting = new HelloWorld() {  //  anonymous class 
            public void g2() { System.out.println("do this too.. ");}
            public void greet() {  System.out.println("Salute ");  }
        };  


        englishGreeting.greet();
        ((EnglishGreeting)englishGreeting).gg();
        frenchGreeting.greet();
//        ((frenchGreeting.getClass())frenchGreeting).g2();  // gives a checked error
    }  

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

注:锯Can't call anonymous class method & Anonymous Inner Classes Inside Methods以及其他一些相关讨论。

TIA。

//================================================ =

编辑:

下面的方法有效——无论它的值(value)如何,都离它更近了一步。当在新对象上调用该方法时,不查找其引用类型。

        HelloWorld frenchGreeting = new HelloWorld() {
            public HelloWorld g2() { System.out.println("do this too.. ");  return this; }
            public void greet() {  System.out.println("Salute ");  }
        }.g2();  

最佳答案

只能直接调用,例如

new HelloWorld() {
    // ...
}.g2();

但是,请注意,您不能分配变量并直接调用它,也不能在方法的其他地方调用它。尽管如此,这是我能想到的最接近回答你的问题的方法。

关于java - Java中匿名类的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25453209/

相关文章:

Java - 使库类具有可比性

c++ - C++ 中指针的运行时多态性

java - 无法在 Android 中以 AM、PM 格式正确显示时间

java - 查找 SWT 浏览器的浏览器类型/版本

java - Jersey:HTTP 响应后关闭 I/O 资源

class - 如何处理类内部的多态性

c++ - 关于c++抽象基类的问题

java - lambda表达式是java中匿名类的改进和本质版本吗?

c++ - 我什么时候需要 C++ 中的匿名类?

java - 使用 SimpleDateFormat 无法解析的日期