【问题标题】:Python-like decorators in Java? [duplicate]Java中的类似Python的装饰器? [复制]
【发布时间】:2011-05-31 21:20:39
【问题描述】:

我大部分时间都在 Python 中进行编程,如果我对这个问题的处理方法很短,请原谅我:

我想让某个类的某些方法需要登录凭据。简单来说,每个方法都要检查类变量user是否被设置,如果设置了则继续,如果没有则吐出“你需要登录”的信息。

在 Python 中,我只需编写一个装饰器来执行此操作。如何用尽可能少的冗余代码在 java 中完成同样的事情?

谢谢!

【问题讨论】:

标签: java python


【解决方案1】:

在 Java 中解决此问题的一种方法是使用Aspect-oriented programming 工具。一种这样的工具是AspectJ。你可能会发现这类问题是一个通常用来激励 AOP 的例子。

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

【讨论】:

  • 感谢您的回答。我还有很多其他类似的问题,所以它可能不会太“重量级”。我会研究 AspectJ 和 Guice。
【解决方案2】:

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

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

【讨论】:

    【解决方案3】:

    你可以试试Google Guice AOP,它比AspectJ之类的AOP框架相对更轻量级。

    【讨论】:

      猜你喜欢
      • 2012-02-09
      • 1970-01-01
      • 1970-01-01
      • 2019-09-20
      • 2010-10-14
      • 2012-06-02
      • 2013-06-12
      • 2014-04-08
      相关资源
      最近更新 更多