有没有办法捕获匿名类的类型?
在下面的例子中,我如何调用匿名类的方法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/