"Anoynmous方法"有趣的行为

Ste*_* P. 0 java

我开始使用这个代码,它没有编译:

Object[] obj= new Object[2];
obj[0]=new Object () { public String compute() {return "yay 1!";} };
obj[1]=new Object () { public String compute() {return "yay 2!";} };

for (Object o : obj)
    System.out.println(o.compute());
Run Code Online (Sandbox Code Playgroud)

因为Object没有compute()为其定义的方法.所以,我假设java扔掉了这个函数; 但是,以下确实有效:

Object[] obj= new Object[2];
obj[0]=new Object () { public String toString() {return "yay 1!";} };
obj[1]=new Object () { public String toString() {return "yay 2!";} };

for (Object o : obj)
    System.out.println(o);
Run Code Online (Sandbox Code Playgroud)

所以,java必须仍然将函数定义存储在某个地方,对吧?或者这是因为我压倒一切toString()

我的问题是如何告诉java compute()存在?

如果不可能这样做,我可以做一些事情,比如重写一个对象存在的方法,就像我在第一个例子中所做的那样吗?该方法compute()实际上代表的是需要一个方法int.这可能很糟糕,但我应该覆盖wait(long l)吗?

提前致谢.

Mar*_*nik 5

Java并没有"抛弃"这种方法; 你放入该数组的实例拥有它,但Java的类型系统没有任何特性可以使它们可用于外部代码.

例如,您可以通过反射验证方法的存在.

如果您需要更多匿名类的方法,请定义适当的接口并使用new MyInterface() { ... }.