2009-01-14 56 views
39

我需要將Java 1.5se應用程序轉換爲C#2.0。我在哪裏可以找到Java到C#的轉換器?

有沒有人知道一個工具(最好是免費/開源)來做到這一點?

+3

使用最好的工具。您的手指和大腦。 2009-01-14 13:53:42

+1

增加賞金,因爲Java語言轉換助理不再可用。我發現了銳化,但是還有其他工具嗎? – Residuum 2010-10-28 12:18:13

回答

15

Java Language Conversion Assistant。可選擇安裝(至少)Visual Studio 2005標準版。

選擇文件/打開/轉換/ Java語言轉換助手。

請記住手動檢查代碼後。它會有很多問題。

+0

在Java到C#的轉換中有沒有其他的選擇?我已經成功地使用VS2005將Java代碼轉換爲C#,而不需要太多修改,我非常喜歡它。 – Gant 2009-01-14 14:07:44

+6

它不僅在實現級別有問題,而且也不會以.NET慣用方式設計。我再說一次,手工移植... – 2009-01-14 14:09:41

27

即使有這樣一個工具,我強烈建議您手動進行轉換。自動轉換器通常忠實地複製代碼,但忽略成語 - 因爲它們確實很難得到正確的答案。另外,.NET和Java中的泛型之間的差異可能導致兩個代碼庫中的一些非常不同的決定。

真的,你會做得更好的手動。

+0

我同意。我確實看過Java語言轉換助手的一個相對較小的項目,轉換後所需的清理工作並不比重寫所需的工作小得多。 – 2009-01-14 14:10:28

+0

同上,但不止一次,儘管強調警告各自的客戶。 – 2009-01-14 15:45:29

13

ikvm暴露在.NET中的Java類。它不是一個轉換器,但基於我的經驗,我會推薦給任何人從Java到.NET的過渡。

7

雖然兩種語言的語法看起來很相似,但語義卻有很大不同。提幾個地方兩種語言誤入歧途

  • 泛型,Java的編譯一切對象,C#保留了泛型類型
  • 例外,Java已經檢查異常,C#不
  • 匿名類和內類,Java有匿名類和嵌套類,C#都沒有。相反,C#有代表和事件。編程模型因此是非常不同的代表,C#具有函數指針的概念,這導致了不同的編程方式。
  • 事件,C#具有導致不同編程方式的事件和組件的概念。
  • API,將所有語義差異放在一邊,兩種語言都具有龐大的API,這兩者都不是很平常的轉換。

換句話說,您將無法自動進行這樣的轉換。如果更改爲C#的原因是能夠將您的代碼轉換爲.exe文件,那麼Java市場中也有各種選擇。

5

現在,我測試有形的解決方案(即不是免費的)

Tangible Source Converter

,並將它添加一個類助手。但在它之外,結果看起來很好。

的Java:(原創)

public class PackVariableArrays { 


private ClassError myerror=new ClassError(); 


public VariableArrays unpack(String txt) { 
    VariableArrays pc = new VariableArrays(); 
    Variable lc; 
    txt=txt.replace("\r\n","\n"); 
    setMyerror(new ClassError()); 
    if (txt==null) { 
     lc=new Variable(); 
     lc.name="ERV-5: Empty values"; 
     pc.addItem(lc); 

     return pc; 
    } 
    String[] linecode = txt.split(ClassUtil.SEPARATOR2); 
    int blen = 0; 
    int tmpint = 0; 

    int numelement = 9999; 

C#(轉換)

public class PackVariableArrays { 


    private ClassError myerror =new ClassError(); 


    public virtual VariableArrays unpack(string txt) { 
     VariableArrays pc = new VariableArrays(); 
     Variable lc; 
     txt=txt.Replace("\r\n","\n"); 
     Myerror = new ClassError(); 
     if (txt==null) { 
      lc=new Variable(); 
      lc.name="ERV-5: Empty values"; 
      pc.addItem(lc); 

      return pc; 
     } 
     string[] linecode = StringHelperClass.StringSplit(txt, ClassUtil.SEPARATOR2, true); 
     int blen = 0; 
     int tmpint = 0; 

     int numelement = 9999; 

這是一個簡單的情況,但它工作正常。然而,正如我早說的那樣,它使用了一個Class Helper(StringHelperClass.StringSplit),這很好,但它並不需要。在它之外,結果代碼非常清晰。

2

你試過XMLVM? 它有一個選項來自動轉換爲C#這樣的:

xmlvm --in=myjar.jar --out=output_dir --target=csharp 
0

最近Xamarin已經移植Android的使用削尖爲單聲道。檢查出this鏈接。

相關問題