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 时,) 在函数覆盖之前关闭 我说的不是),我说的是) 用于构造函数。 但是函数覆盖不应该发生在)之前吗? registerReturn 的子类吗? 【参考方案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中以不区分大小写的方式检查一个字符串是不是包含另一个字符串?

此应用程序已请求运行时以不寻常的方式终止它。

Flutter 应用重新打开后以不寻常的方式启动

具有 char 数组的 C++ 结构以不寻常的方式初始化为零

此应用程序已请求运行时以不寻常的方式终止它[重复]

如何在 Flask/Jinja 模板中以不同于过滤器的方式使用管道?