问题描述
我遇到过以下奇怪的语法,我从未见过这样的代码片段,虽然不是必需的,但很好奇
new Object() {
void hi(String in) {
System.out.println(in);
}
}.hi("strange");
上面的代码给出了strange
输出
谢谢
1楼
您已经创建了Object
的 ,该引入了一种名为hi
的方法,此后您将使用参数"strange"
调用此方法。
假设您有:
class NamedClass extends Object {
void hi(String in) { System.out.println(in); }
}
NamedClass instance = new NamedClass();
instance.hi("strange");
如果仅在一个地方需要此类,则无需真正命名,以此类推-通过将其设为匿名类,您可以摆脱它的名称,定义和实例化该类,并在单个内部立即调用hi
方法。表达。
2楼
这是完全正常的,被称为匿名类,它经常使用,如果您想将对象引用传递给函数,则可以使用匿名类或使用回调来实现,现在.hi结尾是有效的,因为您只是使用new运算符实例化了Object类型的对象,并且对其具有引用,因此这才起作用。
3楼
您已经创建了Object的匿名子类,然后调用了该方法。 存在四种类型的匿名内部类:
1)Inner class,
2)Static nested classes
3)Method local inner classes
4)Anonymous inner classes
在匿名内部类中,您可以在那里定义,实例化和使用该内部对象