2012-03-16 84 views
4

我有一個用C編寫的算法,它的代碼可以由C預處理器處理,但由於在java中沒有預處理器,所以我不知道如何編寫java代碼來處理這種事情。 C代碼是在Java中實現#ifdef

#ifdef Tile_size_utility 
#define print_error 0 
else 
#define print_error 1 
#endif 

我該如何在Java中實現這個功能?

+0

也許這有助於:http://www.javaworld.com/javaworld/javatips/jw-javatip5.html – 2012-03-16 05:19:27

+0

靜態最終int是儘可能接近 – Kevin 2012-03-16 05:21:48

+1

我得到的答案來自:http:// stackoverflow。 COM /問題/ 1813853/IFDEF,IFNDEF式的Java – NguyenDat 2012-03-17 02:24:13

回答

1
Class ErrorVerbose { 
      private static boolean enabled = False; 

      public static setEnable(boolean enable) 
       enabled = enable; 
      } 

      public static perror(String msg) { 

       if (enabled) { 
       /* Print */ 
       } 

      } 
    } 


class YourClass { 

      public YourClass(....,boolean status) { 

       ErrorVerbose.SetEnable(status) 
        . 
        . 
      } 

    } 

嗯,是的,要麼你可以做的是一個非靜態類,以便其他類可以啓用/禁用詳細。製作一個ErrorVerbose類的好處是你可以添加更多的信息,比如時間,日期,函數名(被調用)等等,這使得它更具信息性,我只是給了一個框架。

1

你不能。

但是,Java確實具有繼承和多態性。您可以利用這些概念和依賴注入模式以更清晰但不同的方式解決問題。

如果您發佈有關print_error的具體內容,我可以給出更準確的答案。

3

我們不能將它翻譯成Java。我們必須分析,財產(Tile_size_utility)的設置和我們需要的地方print_error。然後,我們可以實施等效的解決方案

舉例說明:假定,Tile_size_utility是一個系統屬性(對環境的設置),我們需要PRINT_ERROR爲(布爾)標記,那麼這應該工作:

public class MyClass { 

    public final static boolean PRINT_ERROR = 
      (System.getProperty("Tile_size_utility") != null); 

} 

現在,如果你做一些set Tile_size_utility=myutiliy或啓動與參數

-DTile_size_utility=myutiliy 

然後PRINT_ERROR java會被設置爲true

0

使用構建DefineManger:

abstract public class DefineManager { 
    abstract public boolean isDefined(String k); 
    abstract public String getDefine(String k); 
    abstract public void setDefine(String k, String v); 
    abstract public void  undefine(String k); 
} 

if (isDefined("Tile_size_utility")) { 
    setDefine("print_error", "0"); 
} 
else { 
    setDefine("print_error", "1"); 
} 
0

JVM的動態編譯代碼,原生因此這些設置可以在運行時被改變,並得到幾乎相同的性能。

您可能會發現,C++支持的許多技巧在Java中都不需要,因爲它有解決問題的其他解決方案,這些解決方案留給JVM。與其他語言相比,Java往往功能較差,但它所具有的特性經過了大量優化,可能會讓某些開發人員感到驚訝。