我开始使用这个代码,它没有编译:
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)吗?
提前致谢.
Java并没有"抛弃"这种方法; 你放入该数组的实例拥有它,但Java的类型系统没有任何特性可以使它们可用于外部代码.
例如,您可以通过反射验证方法的存在.
如果您需要更多匿名类的方法,请定义适当的接口并使用new MyInterface() { ... }.
| 归档时间: |
|
| 查看次数: |
50 次 |
| 最近记录: |