Существуют ли декораторы в java или c # как декораторы python functools, например @wraps - PullRequest
0 голосов
/ 08 июня 2018

Декораторы являются важной частью 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-подобные декораторы.

1 Ответ

0 голосов
/ 08 июня 2018

В 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.(Точно так же, как если бы Lombok-ified Java не была настоящей Java.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...