【问题标题】:Java Annotations - Disabling codeJava Annotations - 禁用代码
【发布时间】:2015-02-25 12:06:52
【问题描述】:

我想为 Android 应用程序创建一些日志记录功能,并且我希望有可以禁用的代码行,而无需在每次我想记录某些内容时编写 if( traces activated ) trace stuff

使用 C 宏,我可以通过多种方式做到这一点,例如:

#ifdef _DEBUG
#    define TRACE(msg)
#else
#    define TRACE(msg) SomeLogClass::log( msg );
#endif

然后在代码中保留对该宏的调用,无论它是否处于活动状态:

TRACE("blabla")

有没有办法使用 Java 注释做类似的事情?

我可以在日志类中添加一个布尔标志来记录或不记录给定的消息,但这种方式的问题是,无论是否启用跟踪,都将始终计算给定日志函数的参数,这会在频繁调用的代码片段中造成一些性能损失。

谢谢你:)

【问题讨论】:

  • AFAIK 没有一个的方法。我也不确定注释是如何进入其中的。
  • 有一些工具,比如天线,可以为 Java 提供宏再处理。那是你最好的选择。但是任何解决方案都需要编译时工具,因为 Java 中没有该功能。

标签: java android logging annotations conditional-statements


【解决方案1】:

有时您必须检查是否启用了日志记录,遗憾的是没有解决方法。 另一种选择可能是使用不同的流将您的数据推送到无处(具有空方法的自定义流)。流只会在记录过程开始时定义一次,因此不需要检查是否启用了跟踪

【讨论】:

  • 感谢您的回答,但即使在不需要时仍会计算参数,我想避免这种情况。
【解决方案2】:

我想我为你找到了解决方案,例如创建您自己的注释以使用日志记录(我将创建 @Logger :))并定义切入点和连接点(就像您在 AOP 中使用的那样)它应该适合您。 关注此链接http://fernandocejas.com/2014/08/03/aspect-oriented-programming-in-android/

或者你可以使用 android-aspectj : http://blog.punegtug.org/2010/11/adding-aspect-to-android.html

【讨论】:

  • 谢谢你的回答,我去看看。
猜你喜欢
  • 2018-11-05
  • 1970-01-01
  • 2012-06-10
  • 2014-12-16
  • 2015-01-24
  • 1970-01-01
  • 2017-11-15
  • 2020-12-24
  • 2014-04-24
相关资源
最近更新 更多