java 或 c# 中是否有装饰器,例如 python functools 装饰器,即@wraps



装饰器是Python的重要组成部分。简单来说:它们是修改另一个函数功能的函数。它们有助于缩短我们的代码。

例如:

def greet(name):
def get_message():
return "Hello "
result = get_message()+name
return result
print greet("John")
# Outputs: Hello John

我们可以在上面的代码中使用 python 函数装饰器更短、更轻松地完成工作:

@greet
def get_message():
return "Hello"

我认为装饰器非常有用。在java或c#中是否有类似的东西。我知道@override等等,但我找不到类似 python 的装饰器。

在Java中没有等同于装饰器。

据我了解,Python 中的装饰器本质上是用于方法转换的语法糖。 例如(从 PEP 318 开始(:

def foo(cls):
pass
foo = synchronized(lock)(foo)
foo = classmethod(foo)

变成这样:

@classmethod
@synchronized(lock)
def foo(cls):
pass

这种事情在 Java 中不起作用,因为 Java 方法不是第一类对象,Java 方法和方法名称之间的绑定是不可变的。

你也许能够做一些你可以用Python装饰器做的事情,使用注释驱动的代码Java源代码或字节码重写等。 然而,以这种方式实现的装饰器应该被视为Java语言的一部分。 (就像龙目岛化的Java不是真正的Java一样。

最新更新