【发布时间】:2021-08-31 14:35:53
【问题描述】:
我遇到了一个代码,有一件事情难倒了我。这是代码
static public Return fun1()
{
return new register(new SomeMap[]{
null,
new SomeMap(new Basic(String.class), new Basic(String.class))
})
{
@Override
public Return getSomething(int val)
{
....
}
};
}
如您所见,覆盖回调方法定义在new register(..) 的范围之外。回调函数似乎是在它自己的代码块中定义的。这可能吗?这是如何工作的?
) 在函数覆盖之前。
不应该这样吗?
static public Return fun1()
{
return new register(new SomeMap[]{
null,
new SomeMap(new Basic(String.class), new Basic(String.class))
}
@Override
public Return getSomething(int val)
{
....
}
);
}
public static class register extends SomeMap
{
public register(SomeMap[] somemaps)
{
}
public Return getSomething(int val)
{
....
}
}
public static abstract class SomeMap
{
// no constructors here just some method definitions here
}
【问题讨论】:
-
你可以数一下大括号,看看它是在匿名类定义中定义的。不过它看起来确实是由一只醉酒的猴子写的。
-
当我签入我的 IDE 时,
)在函数覆盖之前关闭 -
我说的不是
),我说的是{。)用于构造函数。 -
但是函数覆盖不应该发生在
)之前吗? -
register是Return的子类吗?
标签: java object callback anonymous-class