Java中的@override与Python中的@decorator的区别
我看了一些相关文档,发现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本身并不认识任何装饰器注解。装饰器和注解是两回事。