Java中类似Python的装饰器?

2022-09-01 16:02:33

我大部分时间都花在Python中编程,所以如果我解决这个问题的方法很短,请原谅我:

我想让类的某些方法需要登录凭据。简单地说,每个方法都应该检查是否设置了类变量,如果是这样,请继续,但如果没有,请吐出“您需要登录”消息。user

在Python中,我只会写一个装饰器来做到这一点。我怎样才能用尽可能少的冗余代码在java中完成同样的事情?

谢谢!


答案 1

在Java中解决这个问题的一种方法是使用面向方面的编程工具。其中一个工具是AspectJ。您可能会发现,这种类型的问题是通常用于激励 AOP 的示例。

AOP可能是解决此特定问题的一种非常重量级的方法,因此您可能希望探索如何向每种方法添加适当的检查。在原生Java中,没有任何直接等同于Python的装饰器。


答案 2

最简单的方法是编写一个类似“assertCredentials”的方法,并在每个需要凭据的方法开始时调用该方法。如果未设置凭据,则该方法应引发异常,这将中止父方法。

Java有可以用来装饰方法等的注释,但我不认为在这种情况下使用注释会简化事情。