【问题标题】:No preprocessor in Java - If I would conditionally like verbose output for debug, what's the best way?Java 中没有预处理器 - 如果我有条件地喜欢详细输出以进行调试,那么最好的方法是什么?
【发布时间】:2013-12-20 09:21:13
【问题描述】:

所以,在像 C 和 C++ 这样的语言中,我可以定义一个预处理器指令并像这样进行条件编译:

#define DEBUG 1


#ifdef DEBUG
   cout << "Some Stuff, blah blah blah" << endl;
#endif

我的目标是在 Java 中做一些类似或大致类似的事情,这样我就可以进行一些调试,然后快速打开或关闭 DEBUG 以进行调试或发布编译。在java中有什么接近这个的地方吗?也许是一个

public static final String DEBUG = "YES"

我不知道....有什么接近这个的,我最好的策略是什么。建议?

编辑:我希望避免任何自定义库,因为我是强迫症.....lol

【问题讨论】:

  • 你知道日志文件吗(例如 Apache Log4j:)

标签: java compilation preprocessor


【解决方案1】:

Java 在这种情况下非常灵活,而且有许多自定义库可以让您做到这一点(log4j)。

由于您不想使用其中任何一个,但仍允许您灵活地使用它们而无需重新编译代码,

  1. 定义一个属性文件(比如 custom.properties)

enabledebug=true

  1. 定义一个全局属性

     class Global {
    
         public static boolean DEBUGFLAG=false;
    }
    
  2. 定义一个方法来读取属性和标志值到全局变量

    public void load() {
      Properties props = new Properties();
      FileInputStream fis = new FileInputStream("....custom.properties")
      props.load(fis);
      Global.DEBUGFLAG= Boolean.valueOf(props.get("enabledebug"));
    }
    
  3. 从主方法调用load方法

  4. 在需要打印详细信息时使用该标志

    if(Global.DEBUGFLAG) {
    
     //print some thing
    }
    

【讨论】:

  • 哦,我真的很喜欢这个。我认为这与我正在寻找的最接近 :D :D :D
  • 我将 Global.DEBUGFLAG= 行的答案编辑为由于未正确将对象转换为布尔值而不会引发异常的部分。所以我把 String 改为 Boolean。
【解决方案2】:

我使用一个布尔常量来做到这一点......

public static final boolean VERBOSE = true;
.
.
.
if (VERBOSE) log("your message here");

当 VERBOSE=false 时,编译器会忽略 IF 语句。

【讨论】:

    【解决方案3】:

    我通常会这样做:

    public static final bool FEATURE_SOMETHING = false
    
    if (FEATURE_SOMETHING) {
       do something / instantiate other class etc.
    }
    

    【讨论】:

    • 这正是我所考虑的。
    【解决方案4】:

    如果它只是您需要的日志记录,有很多Java logging APIs 可供选择,包括Java 本身内置的一个。它们不会像条件代码那样方便。但是当您的代码部署后,您可以打开日志记录并获取输出,而这是预处理代码无法做到的。

    【讨论】:

    • 这是一些很好的信息。我认为应用程序不会复杂到需要这种日志记录,但毫无疑问,我将来会需要这种情况!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-19
    • 2020-04-18
    • 2010-11-18
    相关资源
    最近更新 更多