Java中有类似Python的装饰器吗?

27 投票
3 回答
14444 浏览
提问于 2025-04-16 09:09

我大部分时间都在用Python编程,所以如果我对这个问题的处理方式有点片面,请多包涵:

我想让一个类中的某些方法需要登录凭证。简单来说,就是每个方法都要检查一下类里的变量user是否已经设置,如果设置了就继续执行,如果没有设置,就提示“你需要登录”。

在Python中,我只需要写一个装饰器来实现这个功能。那么在Java中,我该如何用尽量少的重复代码来做到这一点呢?

谢谢!

3 个回答

7

你可以试试 Google Guice AOP,它比像 AspectJ 这样的 AOP 框架要轻量很多。

8

最简单的做法就是写一个叫“assertCredentials”的方法,然后在每个需要用到凭证的方法开始时调用这个方法。如果凭证没有设置,这个方法就会抛出一个异常,这样就会终止父方法的执行。

Java有一些注解可以用来修饰方法等等,但我觉得在这种情况下使用注解并不会让事情变得更简单。

16

在Java中解决这个问题的一种方法是使用一种叫做面向切面编程的工具。其中一个工具是AspectJ。你可能会发现,这种类型的问题常常被用来说明AOP的用处。

不过,AOP可能对解决这个特定问题来说有点复杂,所以你可以考虑在每个方法中添加适当的检查。其实在原生Java中,并没有直接等同于Python装饰器的东西。

撰写回答