Java中没有预处理器-如果我有条件地希望详细输出用于调试,那么';这是最好的办法吗? P>这样,在C语言和C++语言中,我可以定义一个预处理器指令,并进行条件编译,比如: #define DEBUG 1 #ifdef DEBUG cout << "Some Stuff, blah blah blah" << endl; #endif

Java中没有预处理器-如果我有条件地希望详细输出用于调试,那么';这是最好的办法吗? P>这样,在C语言和C++语言中,我可以定义一个预处理器指令,并进行条件编译,比如: #define DEBUG 1 #ifdef DEBUG cout << "Some Stuff, blah blah blah" << endl; #endif,java,compilation,preprocessor,Java,Compilation,Preprocessor,我不知道……有没有类似的地方,我最好的策略是什么。推荐 编辑:我希望避免使用任何自定义库,因为我是强迫症患者…..lol我使用布尔常量来实现这一点 public static final boolean VERBOSE = true; . . . if (VERBOSE) log("your message here"); 当VERBOSE=false时,编译器将忽略IF语句。我使用一个布尔常量来完成此操作 public static final boolean VERBOSE = true;

我不知道……有没有类似的地方,我最好的策略是什么。推荐


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

我使用布尔常量来实现这一点

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

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

我使用一个布尔常量来完成此操作

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

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

我通常会执行以下操作:

public static final bool FEATURE_SOMETHING = false

if (FEATURE_SOMETHING) {
   do something / instantiate other class etc.
}

我通常会这样做:

public static final bool FEATURE_SOMETHING = false

if (FEATURE_SOMETHING) {
   do something / instantiate other class etc.
}

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

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

Java在这种情况下非常灵活,而且有许多自定义库支持您这样做(log4j)

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

  • 定义属性文件(例如custom.properties)
  • enabledebug=true

  • 定义全局属性

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

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

  • 需要打印详细信息时,请使用该标志

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

  • Java在这种情况下非常灵活,而且有许多自定义库使您能够做到这一点(log4j)

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

  • 定义属性文件(例如custom.properties)
  • enabledebug=true

  • 定义全局属性

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

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

  • 需要打印详细信息时,请使用该标志

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

  • 你知道日志文件(apachelog4j代表eg:)你知道日志文件(apachelog4j代表eg:)这是一些很好的信息。我不认为应用程序将足够复杂,需要这种日志记录,但毫无疑问,在未来的情况下,我将需要这种记录!这是一些很好的信息。我不认为应用程序将足够复杂,需要这种日志记录,但毫无疑问,在未来的情况下,我将需要这种记录!这差不多是我在考虑的。这差不多是我在考虑的。哦,我真的很喜欢这个。我认为这与我所寻找的最接近:D:D:DI编辑了Global.DEBUGFLAG=行的答案,该行由于没有正确地将对象转换为布尔值而不会引发异常。所以我把字符串改为布尔值。哦,我真的很喜欢这个。我认为这与我所寻找的最接近:D:D:DI编辑了Global.DEBUGFLAG=行的答案,该行由于没有正确地将对象转换为布尔值而不会引发异常。所以我把字符串改为布尔值。