gpt4 book ai didi

java - "Anoynmous methods"有趣的行为

转载 作者:行者123 更新时间:2023-12-01 08:11:30 25 4
gpt4 key购买 nike

我从这段代码开始,但它没有编译:

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());

因为对象没有为其定义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);

那么,java 一定仍然在某个地方存储了函数定义,对吧?或者这是因为我重写了 toString() ?

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

如果不可能做到这一点,我可以做一些事情,比如重写对象确实存在的方法,就像我在第一个示例中所做的那样? compute() 实际代表的方法是采用 int 的方法。这可能很糟糕,但我应该重写 wait(long l) 吗?

提前致谢。

最佳答案

Java并没有“抛弃”方法;您放入该数组的实例拥有它,但 Java 的类型系统没有使它们可供外部代码使用的功能。

例如,您可以通过反射来验证方法是否存在。

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

关于java - "Anoynmous methods"有趣的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16914532/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com