Java中的@override与Python中的@decorator的区别

5 投票
1 回答
10292 浏览
提问于 2025-04-17 22:47

我看了一些相关文档,发现Java中的@override和Python中的@decorator之间似乎有某种关系。

有人能用简单的语言解释一下这种关系吗?

我知道在Python中,函数是第一类对象,也就是说函数可以作为另一个函数的参数。

那么,Java中的@override语法和Python中的装饰器有什么不同呢?

1 个回答

18

在Java中,@override和Python中的@decorator没有任何关系。

Java里的@override是一个注解,用来标记一个方法是覆盖了另一个方法。也就是说,当我扩展一个基类,并且覆盖了它的某个方法时,我可以在这个方法前加上@override。这个注解对我的代码没有实际影响,只是给编译器一个提示。就像Martijn Pieters所说的,想了解更多可以看看What's "@Override" there for in java?

而Python中的@decorator是一种设计模式。装饰器可以附加到一个方法上,以扩展它的功能。当调用一个方法时,它的装饰器会先被调用。比如,你可以用它来记录信息。我在一个项目中用过一次,来实现缓存功能。

在Java中,最接近@decorator的东西就是定义一个注解,它可以像装饰器一样工作,或者使用像AspectJ这样的库。不过,这并不是Java核心语言的一部分,Java本身并不认识任何装饰器注解。装饰器和注解是两回事。

撰写回答