【问题标题】:Is it possible to instantiate an interface in java?是否可以在java中实例化接口?
【发布时间】:2022-01-06 21:37:06
【问题描述】:

我正在阅读有关 Spring Retry 的 java 教程,在那里我读到了 RetryCallback,这是一个接口

在同一个教程中,我发现了这段代码:

retryTemplate.execute(new RetryCallback<Void, RuntimeException>() {
    @Override
    public Void doWithRetry(RetryContext arg0) {
        myService.templateRetryService();
        ...
    }
});

在我看来,RetryCallback 的匿名对象正在被实例化。但后来我们只是阅读这是一个界面

有人能解释一下这里发生了什么吗?

虽然不是必需的,但以防万一here 是教程的链接

【问题讨论】:

  • 就像你说的,它是接口的匿名子类。

标签: java oop interface


【解决方案1】:

这个:

new RetryCallback<Void, RuntimeException>() {
    @Override
    public Void doWithRetry(RetryContext arg0) {
        myService.templateRetryService();
        ...
    }
}

anonymous class。运行此代码时,将实例化实现 RetryCallback 的类 MyContainingClass$1 的对象。

在实例方法中实例化时,匿名类具有对 MyContainingClass 实例的隐式引用,可通过语法 MyContainingClass.this 访问。

请注意,类名中的 1 实际上是 n,其中匿名类相对于包含类中的所有匿名类位于第 nth 个位置。

【讨论】:

    【解决方案2】:

    它只是为该接口提供内联实现,而不是实例化接口。它相当于创建一个实现 RetryCallback 的新类 a,并传递给执行

    【讨论】:

      猜你喜欢
      • 2019-01-03
      • 1970-01-01
      • 2013-05-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多