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 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

不过,即使格式正确,我也不会让这种代码飞起来。