这种 Java 语法是什么,其中一节在构造函数之后覆盖方法?



我用下面的代码找到了这个例子:

CompletableFuture<T> completable = new CompletableFuture<T>() {  
@Override  
public boolean cancel(boolean mayInterruptIfRunning) {  
// propagate cancel to the listenable future  
boolean result = listenableFuture.cancel(mayInterruptIfRunning);  
super.cancel(mayInterruptIfRunning);  
return result;  
}  
};  

此语法是什么意思?此方法是否重写类中的方法而不扩展它?

此代码块创建CompletableFuture的匿名子类。此匿名子类使用新实现重写cancel(bool)方法。匿名子类等效于创建一个新类,extends CompleteableFuture需要注意的是,在其他地方重用这个新子类并不简单。

在这种情况下,@Override不是绝对必要的,但它为您提供了几个好处,如本问题的答案所述:

每次重写方法时都使用它以获得两个好处。这样做是为了你可以利用编译器检查来确保你实际上在你认为的时候重写了一个方法。这样,如果您犯了一个常见的错误,即方法名称拼写错误或参数不匹配,系统将警告您方法实际上并没有像您想象的那样重写。其次,它使您的代码更易于理解,因为当方法被覆盖时,它更明显。

此外,在 Java 1.6 中,您可以使用它来标记方法何时实现接口以获得相同的好处。我认为最好有一个单独的注释(如@Implements),但总比没有好。

它是一个匿名类(嵌套类类型之一)。如果您有兴趣,另请参阅 Java 教程 - 类和对象以获取更多类类型。

相关内容

最新更新