2009-01-14 61 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链接。

相关问题