Java 中以异常方式定义的对象回调
Object callback defined in unusual way in Java
我遇到了一个代码,但有一件事难倒了我。这是代码
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
}
虽然普通的简单匿名 class 看起来只是
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
我不会让那种代码飞起来,即使它的格式正确。
我遇到了一个代码,但有一件事难倒了我。这是代码
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
}
虽然普通的简单匿名 class 看起来只是
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
我不会让那种代码飞起来,即使它的格式正确。