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

Are there decorators in java or c# like python functools decorators i.e. @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方法不是第一个class对象,Java方法和方法之间的绑定名称不可变。

您可以使用注解驱动代码 Java 源代码或字节码重写等来完成一些您可以使用 Python 装饰器完成的事情。然而,以这种方式实现的装饰器应该被视为 Java 语言的一部分。 (就像 Lombok 化的 Java 不是真实的 Java。)