我遇到了下面奇怪的语法,我从未见过这样的片段,它不是必需的,但很好理解它
new Object() {
void hi(String in) {
System.out.println(in);
}
}.hi("strange");
以上代码将输出显示为strange
谢谢
答案 0 :(得分:9)
您已创建了anonymous sub-class Object
,其中引入了一个名为hi
的方法,之后您可以使用参数"strange"
调用此方法。
假设你有:
class NamedClass extends Object {
void hi(String in) { System.out.println(in); }
}
NamedClass instance = new NamedClass();
instance.hi("strange");
如果只在一个地方需要这个类,那么就没有真正的需要被命名等等 - 通过使它成为一个匿名类,你可以摆脱它的名字,类被定义和实例化,并且在单个表达式中立即调用hi
方法。
答案 1 :(得分:0)
这是完全正常的,并且被称为匿名类,它经常被使用,如果你想将对象引用传递给函数,你将使用匿名类或者回调的使用,现在.hi结束了.hi是有效的,因为您只是使用new运算符来实例化Object类型的对象,并且您有一个对它的引用,这就是它的工作原理。
答案 2 :(得分:0)
您已经创建了一个匿名的Object子类,然后调用该方法。 存在四种类型的匿名内部类: -
Array
(
[0] => Array
(
[id] => employee1
[data] => Array
(
[0] => Array
(
[salescount] => 4
[salesstat] => Sold
)
)
)
[1] => Array
(
[id] => employee2
[data] => Array
(
[0] => Array
(
[salescount] => 2
[salesstat] => In Progress
)
[1] => Array
(
[salescount] => 5
[salesstat] => Sold
)
)
)
)
在Annonymous内部类中,您可以定义,实例化和使用该内部对象