问题描述
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 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
}
解决方法
虽然一个普通的简单匿名类看起来只是
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
不过,即使格式正确,我也不会让这种代码飞起来。