Java中以不寻常方式定义的对象回调
Posted
技术标签:
【中文标题】Java中以不寻常方式定义的对象回调【英文标题】:Object callback defined in unusual way in Java 【发布时间】: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
的子类吗?
【参考方案1】:
虽然普通的简单匿名类看起来只是
new Anonymous()
public void method()
// implementation
;
该示例采用 SomeMap[]
构造函数参数,但其他情况相同
new register( // New anonymous class
new SomeMap[] // Provide SomeMap[] for the constructor
null, // SomeMap[0] contains null
new SomeMap(new Basic(String.class), new Basic(String.class)) // SomeMap[1] has data
) // End constructor
// Define the method, in the right place
@Override
public Return getSomething(int val)
; // End anonymous class
我不会让那种代码飞起来,即使它的格式正确。
【讨论】:
我只是对这部分感到困惑,其中覆盖功能在)
之外。它不应该紧跟在初始化块之后吗?
没有初始化块。方法定义必须在)
之外,否则它会在构造函数参数内。
哦。我很困惑,因为这就是***.com/questions/5310403/… 这里所描述的内容,而且getSomething()
必须是SomeMap
的一部分,对吗?
SomeMap
(或者更确切地说是SomeMap[]
)是构造函数参数,所以不对。
另外,我们不能在匿名类中调用构造函数,这就是我们使用初始化块的原因,对吧?以上是关于Java中以不寻常方式定义的对象回调的主要内容,如果未能解决你的问题,请参考以下文章
如何在Java中以不区分大小写的方式检查一个字符串是不是包含另一个字符串?