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。)
装饰器是 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。)